2011-09-26 75 views
3

'catch 1 = 0'和'(catch 1 = 0)'有什么区别?erlang,'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}]}} 

回答

14

没有区别。唯一的变化是,当你尝试操作的结果绑定到一个变量:

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之间简直是优先的问题,作为前缀运算符,=作为中缀运算符。括号有助于使用例的优先级明确。

否则,它们是完全一样的。

相关问题