论坛首页 综合技术论坛

由一个语法错误谈开来...

浏览 2198 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-11  
Erlang (BEAM) emulator version 5.6.5 [smp:2] [async-threads:0]

Eshell V5.6.5  (abort with ^G)
1> X={"hello","world"}.
{"hello","world"}
2> Y=<<1,2,3>>.
* 1: syntax error before: '<'
2> 


开始还很奇怪,以为写错了Y变量的匹配,直到书看到比较表达式 “=<(小于等于)”才明白了错在哪里,看来Erlang语法天生就是折腾人的,不过看时间长了,视力大幅度提高哦.... ^_^

正确的Y变量匹配二进制数据得这样写(加空格):
Y = << 1,2,3 >>.


看来还是以后都这样写才好。

究其错误原因:=<是一个操作符,在操作符优先级中“=(匹配操作符)”没有列出,以此现像来看的话,匹配操作符的优先级可能是最低的(虽然操作符是对表达式而言)。



   发表时间:2009-08-11  
看到比较表达式再补充一点,Joe大伯“说99%的时候都要使用 =:=(全等)操作符,==仅用于浮点与整数的比较,看到有==的地方都要加以审查”
好生纳闷,照这个说法,还发明“==”干嘛,下一个OTP直接把==干掉,多清晰,那目前存的可能性是什么,猜猜:是不是==的性能高于=:=咧?  特别是相对于整数与浮点的比较...

0 请登录后投票
   发表时间:2009-08-12  
gtman 写道
看到比较表达式再补充一点,Joe大伯“说99%的时候都要使用 =:=(全等)操作符,==仅用于浮点与整数的比较,看到有==的地方都要加以审查”
好生纳闷,照这个说法,还发明“==”干嘛,下一个OTP直接把==干掉,多清晰,那目前存的可能性是什么,猜猜:是不是==的性能高于=:=咧?  特别是相对于整数与浮点的比较...


估计你对兼容这个词没什么概念。
0 请登录后投票
   发表时间:2009-08-12  
gtman 写道
Erlang (BEAM) emulator version 5.6.5 [smp:2] [async-threads:0]

Eshell V5.6.5  (abort with ^G)
1> X={"hello","world"}.
{"hello","world"}
2> Y=<<1,2,3>>.
* 1: syntax error before: '<'
2> 


开始还很奇怪,以为写错了Y变量的匹配,直到书看到比较表达式 “=<(小于等于)”才明白了错在哪里,看来Erlang语法天生就是折腾人的,不过看时间长了,视力大幅度提高哦.... ^_^

正确的Y变量匹配二进制数据得这样写(加空格):
Y = << 1,2,3 >>.


看来还是以后都这样写才好。

究其错误原因:=<是一个操作符,在操作符优先级中“=(匹配操作符)”没有列出,以此现像来看的话,匹配操作符的优先级可能是最低的(虽然操作符是对表达式而言)。





如果用过C++模板,就不会大惊小怪了
0 请登录后投票
   发表时间:2009-08-12  
感谢楼上两位指点。不过还是有点不同看法:

我当然知道兼容是什么概念,我在想JOE大伯是不是同一时期发明了==和=:=,一先一后还好理解,可如果不是,只能说这个设计太失败了,发明一个让人产生误解的东西,再出书指明要用后一个而不是前一个,在没有深入源码前,我唯一猜测就是==做整数和浮点匹配是不是比=:=更快一些。
即使是兼容,我在想以后的OTP是不是可以这样,例如:
fun ==( call =:=)
这样也就向下兼容了。呵呵。


至于第二个问题,可能是我没有表达清楚,问题来自于X可以执行,Y不能执行。原因是Y表达式中出现了=<,而第一句是={,符号操作符=<与=的优先级与我头脑中想的不一样。事实也证明了确实,开始半天没有明白错误出在哪里。见笑。。。

0 请登录后投票
   发表时间:2009-08-12  
没必要纠缠于语法层面吧
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics