Erlang - параллельное сообщение не ищет правильно - PullRequest
4 голосов
/ 14 октября 2010

У меня есть маленькая проблема, на которую я не могу найти простой ответ.

Я установил:

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}

Вместо этого я получаю и яблоко, и апельсин.

Что я могу сделать ??

Ответы [ 2 ]

5 голосов
/ 14 октября 2010

Это фактически тот же вопрос, что и в Почему переменная Эрланга не используется? , где я дал ответ. По сути, это потому, что все переменные шаблонов в понимании являются новыми, свежими переменными, поэтому, если вы хотите проверить их, вам нужно сделать это явно. Это то же самое, что и для переменных, встречающихся в голове веселья.

4 голосов
/ 14 октября 2010

Интересный вопрос, он мне очень понравился!Похоже, что правила видимости Erlang немного странные (или, по крайней мере, я к этому не привык, потому что я не использую Erlang регулярно) ... Но, похоже, работает следующее:

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