我在學習erlang,並試圖理解原子的概念。我知道Python,簡單來說,這些「原子」的解釋是什麼,或者類似於python。到目前爲止,我的理解是,它就像一個字符串,但沒有字符串操作?erlang原子的簡單解釋
回答
Atom是一個字面常量。沒有價值,但可以用作價值。例子是:true,false,undefined。如果你想使用它作爲一個字符串,你需要應用atom_to_list(atom)來獲得一個字符串(列表)來處理。模塊名稱也是原子。 看看http://www.erlang.org/doc/reference_manual/data_types.html
此外,他們經常用於標記元組,以描述性。例如:
{年齡,42}
而不是僅僅
Docs說:
一個原子是文字,具有名稱的常數。
有時你有幾個選項,你可以選擇。在C例如,你有enum
:
enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
在C,它確實是一個整數,但你可以使用它在代碼的選項之一。 Erlang中的原子在模式匹配中非常有用。讓我們考慮非常簡單的服務器:
loop() ->
receive
{request_type_1, Request} ->
handle_request_1(Request),
loop();
{request_type_2, Request} ->
handle_request_2(Request),
loop();
{stop, Reason} ->
{ok, Reason};
_ ->
{error, bad_request}
end.
您的服務器接收郵件時,有兩個元素的元組,並使用原子不同類型的請求進行區分:request_type_1
,request_type_2
和stop
。它被稱爲模式匹配。
服務器也使用原子作爲返回值。原子的意思是說,一切都很順利。 _
匹配所有內容,以防萬一,那個簡單的服務器收到意想不到的東西,它會退出元組{error, Reason}
,其原因也是原子bad_request
。
布爾值true
和false
也是原子。您可使用功能的條款是這樣的邏輯功能:
and(true, true) ->
true;
and(_, _) ->
false.
or(false, false) ->
false;
or(_, _) ->
true.
(這是一個有點過於簡單,因爲你可以這樣調用:or(atom1, atom2)
,它將返回true
,但它僅用於說明)
模塊名稱也原子,這樣你就可以在模塊名稱綁定變量,並調用它,例如在二郎殼鍵入:
io:format("asdf").
Variable = io.
Variable:format("asdf").
你不應該使用原子作爲字符串,因爲他們不垃圾公司llected。如果您開始動態創建它們,則可能會導致內存不足。只有在有固定數量的選項時,才應使用它們,以便手動輸入代碼。當然,您可以根據需要多次使用相同的原子,因爲它始終指向內存中的同一個點(原子表)。
它們比C枚舉更好,因爲該值在運行時已知。因此,在調試C代碼時,您將在調試器中看到1
而不是Tuesday
。使用原子沒有這個缺點,你會在你的代碼和Erlang shell中看到tuesday
。
- 1. 簡單的解釋
- 2. 簡單的解釋
- 3. 簡單的解釋
- 4. ArrayLists的簡單解釋
- 5. MapReduce的簡單解釋?
- 6. 如何做一個簡單的例子來解釋jQuery.noConflict()與原型?
- 7. Akka.Net羣集簡單解釋
- 8. 簡單的過濾器Erlang
- 9. Erlang ETS原子和分離
- 10. 簡單的例子 - 無法解釋的分類
- 11. 有關簡單因子函數的機制的解釋
- 12. 簡單的for循環的解釋
- 13. 如何將此請求標題解釋爲簡單的句子?
- 14. 最簡單的方法來解釋句子
- 15. C中的簡單管道解釋?
- 16. 阿卡演員的簡單解釋
- 17. 簡單的循環需要解釋
- 18. 對異常的簡單解釋?
- 19. 使用Haskell的簡單解釋器
- 20. 簡單的Android佈局解釋
- 21. 計劃中的簡單解釋器
- 22. as3需要一個簡單的解釋
- 23. 解釋簡單的搜索引擎
- 24. 簡單的Python和需要解釋
- 25. 簡單的iOS代碼行解釋
- 26. Riak中戒指的簡單解釋?
- 27. 簡單的Nutch 1.3/Solr索引解釋
- 28. glOrthof()在OpenGL ES中的簡單解釋
- 29. Jmeter解釋簡單的結果
- 30. 解釋簡單的PHP代碼
Python沒有任何相似之處。 – rightfold 2014-12-27 13:23:25
@rightføld我明白了。我現在修改了我的問題。 – yayu 2014-12-27 13:24:44