erlang REPL определить ошибку диапазона: не может выполнить функцию - PullRequest
0 голосов
/ 16 февраля 2019

У меня был такой простой текст внутри erl:

$erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V8.2  (abort with ^G)
1> right_age(X) when X >= 16, X =< 104 -> true;
1> right_age(_) -> false;
1> right_age(30).
* 1: syntax error before: 'when'

Где я ошибся и как это исправить?

Спасибо.

1 Ответ

0 голосов
/ 17 февраля 2019

Вы не можете определить именованные функции в оболочке Erlang, используя подход, который вы показываете в своем вопросе.Вместо этого вы должны использовать ключевое слово fun, чтобы определить функцию, и связать ее с переменной:

1> RightAge = fun(X) when X >= 16, X =< 104 -> true; (_) -> false end.
#Fun<erl_eval.6.128620087>
2> RightAge(30).
true

Кстати, обратите внимание, что вы можете определить эту функцию проще, всего с помощью одного предложения, переместив охрану в тело функции:

1> RightAge = fun(X) -> X >= 16 andalso X =< 104 end.
#Fun<erl_eval.6.128620087>
2> RightAge(30).
true
...