浏览 2199 次
锁定老帖子 主题:由一个语法错误谈开来...
精华帖 (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 >>. 看来还是以后都这样写才好。 究其错误原因:=<是一个操作符,在操作符优先级中“=(匹配操作符)”没有列出,以此现像来看的话,匹配操作符的优先级可能是最低的(虽然操作符是对表达式而言)。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-11
看到比较表达式再补充一点,Joe大伯“说99%的时候都要使用 =:=(全等)操作符,==仅用于浮点与整数的比较,看到有==的地方都要加以审查”
好生纳闷,照这个说法,还发明“==”干嘛,下一个OTP直接把==干掉,多清晰,那目前存的可能性是什么,猜猜:是不是==的性能高于=:=咧? 特别是相对于整数与浮点的比较... |
|
返回顶楼 | |
发表时间:2009-08-12
gtman 写道 看到比较表达式再补充一点,Joe大伯“说99%的时候都要使用 =:=(全等)操作符,==仅用于浮点与整数的比较,看到有==的地方都要加以审查”
好生纳闷,照这个说法,还发明“==”干嘛,下一个OTP直接把==干掉,多清晰,那目前存的可能性是什么,猜猜:是不是==的性能高于=:=咧? 特别是相对于整数与浮点的比较... 估计你对兼容这个词没什么概念。 |
|
返回顶楼 | |
发表时间: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++模板,就不会大惊小怪了 |
|
返回顶楼 | |
发表时间:2009-08-12
感谢楼上两位指点。不过还是有点不同看法:
我当然知道兼容是什么概念,我在想JOE大伯是不是同一时期发明了==和=:=,一先一后还好理解,可如果不是,只能说这个设计太失败了,发明一个让人产生误解的东西,再出书指明要用后一个而不是前一个,在没有深入源码前,我唯一猜测就是==做整数和浮点匹配是不是比=:=更快一些。 即使是兼容,我在想以后的OTP是不是可以这样,例如: fun ==( call =:=)这样也就向下兼容了。呵呵。 至于第二个问题,可能是我没有表达清楚,问题来自于X可以执行,Y不能执行。原因是Y表达式中出现了=<,而第一句是={,符号操作符=<与=的优先级与我头脑中想的不一样。事实也证明了确实,开始半天没有明白错误出在哪里。见笑。。。 |
|
返回顶楼 | |
发表时间:2009-08-12
没必要纠缠于语法层面吧
|
|
返回顶楼 | |