эрланг, в чем разница между «catch 1 = 0» и «(catch 1 = 0)»? - PullRequest
3 голосов
/ 26 сентября 2011

Чем отличаются «catch 1 = 0» и «(catch 1 = 0)»?

Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8.4  (abort with ^G)
1> 1=0.
** exception error: no match of right hand side value 0
2> catch 1=0.
{'EXIT',{{badmatch,0},[{erl_eval,expr,3}]}}
3> (catch 1=0).
{'EXIT',{{badmatch,0},[{erl_eval,expr,3}]}}

1 Ответ

14 голосов
/ 26 сентября 2011

Разницы нет.Единственное, что меняется, это когда вы пытаетесь связать результат операции с переменной:

1> X = catch 1/0.
* 1: syntax error before: 'catch'
1> X = (catch 1/0).
{'EXIT',{badarith,[{erlang,'/',[1,0]},
                   {erl_eval,do_apply,5},
                   {erl_eval,expr,5},
                   {erl_eval,expr,5},
                   {shell,exprs,7},
                   {shell,eval_exprs,7},
                   {shell,eval_loop,3}]}}

Это просто вопрос приоритета между catch как префиксным оператором и = какинфиксный оператор.Скобки помогают сделать вариант использования однозначным по приоритету.

В остальном они точно такие же.

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