Сопоставление с образцом по закрывающей переменной в анонимном забавном предикате - PullRequest
0 голосов
/ 12 февраля 2012

Я знаю, название отстой ... не знаю, как объяснить, что я спрашиваю, так как насчет кода?

Настройка:

L = [1,2,3,4,5,6,7,8,9].
X = 5.
Y = 10.

Вот что яЯ делаю сейчас:

lists:any(fun(Z) when Z == X -> true; (_) -> false end, L). => true
lists:any(fun(Z) when Z == Y -> true; (_) -> false end, L). => false

Я хотел бы сделать что-то вроде этого без защитного заявления (не знаю почему, просто любопытно, если это возможно.

IМне интересно, если вы можете сделать что-то вроде этого (Да, я знаю, что X в забавной голове делает локальную переменную области):

lists:any(fun(X) -> true; (_) -> false end, L).

Ответы [ 2 ]

7 голосов
/ 12 февраля 2012

Этот конкретный можно записать как:

lists:any(fun(Z) -> Z =:= X end, L).
4 голосов
/ 12 февраля 2012

Чтобы ответить на ваш главный вопрос: это невозможно. В заголовках забавных предложений все переменные рассматриваются как новые и будут скрывать любые существующие привязки в среде. Вы должны использовать защитные устройства для сопоставления захваченных переменных с переменными параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...