2010-10-13 36 views
4

我有一個小問題,我不能找到簡單的答案。Erlang - 並行消息找不到

我設置:

Who = apple. 

Message = [{apple, {0,0,0}}, {orange, {1,1,1}}]. 

Old = [X || {Who, X} <- Message]. 

Old returns as [{0,0,0},{1,1,1}] 

當然我預期的反應是{0,0,0}

相反,我得到兩個蘋果和橘子。

我該怎麼辦?

+0

Erlang應該大寫爲「Erlang」,而不是「ERLANG」 – gleber 2010-10-14 05:14:25

回答

4

有趣的問題,我真的很喜歡那個!看起來像二郎神的作用域規則有點奇怪(或至少我不使用它,因爲我不經常使用的Erlang)......但以下似乎工作:

[Old|_] = [X || {W, X} <- Message, W =:= Who]. 
+0

在這種情況下,我更喜歡'=:='。 – 2010-10-14 08:40:41

+0

在這種情況下有什麼關係?原子可以幾乎相等嗎?無論如何,我已經更新了它。 – tux21b 2010-10-14 08:54:15

5

這是實際上與我在Why Erlang variable is unused?中給出答案的問題相同。基本上,這是因爲理解中的所有模式變量都是新的,新的變量,所以如果你想測試它們,你需要明確地做它。它與發生在頭部的變量相同。