除了您可以在其他語言中找到的數據原語和結構之外,Erlang中的完整類型列表是什麼?Erlang中確切的類型數量是多少?
例如,什麼是套接字句柄的類型?那麼ets可以處理什麼?
此外,哪些類型不可能在節點之間被序列化和交換?我認爲套接字句柄必須是其中的一個,對嗎?
即使在同一節點內的進程中,套接字句柄也是共享的,對嗎?這是無分享原則的例外?
GC對這些共享的東西有什麼行爲? Erlang中的套接字實現是什麼?我認爲這不是一個港口,對吧?
除了您可以在其他語言中找到的數據原語和結構之外,Erlang中的完整類型列表是什麼?Erlang中確切的類型數量是多少?
例如,什麼是套接字句柄的類型?那麼ets可以處理什麼?
此外,哪些類型不可能在節點之間被序列化和交換?我認爲套接字句柄必須是其中的一個,對嗎?
即使在同一節點內的進程中,套接字句柄也是共享的,對嗎?這是無分享原則的例外?
GC對這些共享的東西有什麼行爲? Erlang中的套接字實現是什麼?我認爲這不是一個港口,對吧?
的套接字是端口類型,它是在內置驅動程序中實現的。
在同一個節點中,套接字可以被多個進程共享;所有進程都可以調用套接字,當所有者進程退出時,套接字將被關閉。
當遠程進程嘗試訪問套接字時,我嘗試將套接字發送到遠程進程(在不同節點內),例如, send(),它會引發原因「關閉」的錯誤。
有極少數類型的二郎神,你可以參考的功能是_ Erlang的模塊???(期限),以獲得建在基本類型的列表:
存在被從基本類型導出的第二列表:
然後,您可以考慮基於這些基本類型的任意組合創建無限數量的類型。在一些程序,你會看到一些聲明,如:
-type orddict() :: [{Key :: term(), Value :: term()}].
或
-spec is_key(Key, Orddict) -> boolean() when
Key :: term(),
Orddict :: orddict().
這些信息不是直接由Erlang的編譯器使用,它們是由外部工具,如Dializer使用,是不是強制性的得到一個有效的代碼。 Erlang的主要特性不是類型聲明,而是模式匹配。因此,如果你調用一個函數,並期望形式{ok,Value}
的返回值或{error,Reason}
你會寫類似:
Result = case f(Par) of
{ok,Value} -> resultWhenOk(Value);
{error,Reason} -> resultWhenError(Reason)
end;
,或者如果你不關心錯誤管理:
% get the Name and Age of the employee whose id is Id in a list of people List
% using a function that return a tuple of the form
% {PeopleType, Id, Name,Surname,Age,Sex}
{ok,{employee,Id,Name,_,Age,_}} = find_people(Id,List);