我在學習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. MapReduce的簡單解釋?
- 3. 如何做一個簡單的例子來解釋jQuery.noConflict()與原型?
- 4. 有關簡單因子函數的機制的解釋
- 5. 簡單的例子 - 無法解釋的分類
- 6. 最簡單的方法來解釋句子
- 7. 如何將此請求標題解釋爲簡單的句子?
- 8. 簡單的Python和需要解釋
- 9. Jmeter解釋簡單的結果
- 10. Riak中戒指的簡單解釋?
- 11. 使用Haskell的簡單解釋器
- 12. 解釋簡單的PHP代碼
- 13. 計劃中的簡單解釋器
- 14. MySql代碼的簡單解釋
- 15. 解釋簡單的搜索引擎
- 16. 如何解釋原子動作?
- 17. gen_fsm的獨特原子:Erlang的start/3
- 18. .htaccess重寫規則解釋(簡單)
- 19. '太簡單了'有多簡單? - 解釋了
- 20. Erlang腳本語言解釋器
- 21. 定義的解釋爲自由單子
- 22. 一個簡單的Erlang扭曲者
- 23. 什麼是單元測試的非常簡單的解釋?
- 24. 在Haskell中解析一個簡單的解釋器
- 25. 簡單的解釋器錯誤地解析文件
- 26. 驗證:解釋原因
- 27. JavaScript原型解釋需要
- 28. 任何人都可以用簡單的例子來解釋計數器嗎?
- 29. Javascript'this'reference - 有人可以解釋一下這個簡單的例子嗎?
- 30. 關於Python語句的原子性和全局解釋器鎖
Python沒有任何相似之處。 – rightfold 2014-12-27 13:23:25
@rightføld我明白了。我現在修改了我的問題。 – yayu 2014-12-27 13:24:44