2010-10-13 53 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?中给出答案的问题相同。基本上,这是因为理解中的所有模式变量都是新的,新的变量,所以如果你想测试它们,你需要明确地做它。它与发生在头部的变量相同。