3.>5 || 3.>2 SyntaxError: unexpected tINTEGER,expecting end-of-input
为什么这个是:
3.>5 || 3.> #this seems nonsensical=> false
为什么在我的书中这个似乎给出了一个误导性的答案
3.>5 || 3.>(2)=> false
然而,这个给出了“正确”的答案
3.>(5) || 3.>(2)=> true解决方法 这里的混乱是由于使用.使Ruby将比较解析为方法调用,而不是更普通的二元运算符,例如3>. 2.在Ruby运算符中,例如>最终是 handled as methods,但解析器有特殊情况允许您使用更熟悉的语法.
如果你想象有一个名为gt on integers的方法,你用它来重写你的例子而不是>它可能更清楚它发生了什么.
你的第一个例子,3> 5 || 3.> 2,相当于:
3.gt 5 || 3.gt 2
Ruby试图解析为
3.gt (5 || 3.gt) 2
最后两个是Ruby抱怨的意外tINTEGER.
第二个例子,3> 5 || 3.>将被解析为这样的东西:
3.gt (5 || 3.gt)
这似乎是荒谬的,因为我们知道gt实际上是二元运算符>它应该有第二个运算符.由于Ruby正在解析它,好像它是一个方法,它无法知道应该有多少个参数.至于解析器知道gt方法可能不期望任何参数(我们可以修补猴子>不期望参数).自评价表达式为5 || 3.>短路到5,3.部分永远不会执行,所以不会发生错误.
如果您编写相同的表达式但不使用.,Ruby解析器知道这是一个二元运算符,并期望第二个运算符:
eval '3>5 || 3 >'SyntaxError: (eval):1: Syntax error,unexpected end-of-input3>5 || 3 > ^
最后一个例子,3.>(5)|| 3.>(2),将被解析为:
3.gt(5) || 3.gt(2)
由于括号没有歧义,很明显2是方法调用的参数,因此您得到正确的答案.
总结以上是内存溢出为你收集整理的为什么Ruby中的这个布尔语句会出错?全部内容,希望文章能够帮你解决为什么Ruby中的这个布尔语句会出错?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)