Ruby中使用&&运算符时省略include?括号为何报错?
Ruby中include?配合&&/and的语法差异原因
问题现象
调用include?方法时,配合&&运算符省略括号会报错,但用and代替&&时,省略括号却能正常运行,代码示例如下:
names = ["Sony", "Mac"] if names.include? "Sony" && names.include? "Mac" puts names end # 会报错
names = ["Sony", "Mac"] if names.include?("Sony") && names.include?("Mac") puts names end # 正常运行
names = ["Sony", "Mac"] if names.include? "Sony" and names.include? "Mac" puts names end # 正常运行
核心原因:运算符优先级差异
这本质是Ruby运算符优先级和方法调用规则共同作用的结果:
&&的优先级高于不带括号的方法调用。所以第一个报错的代码中,Ruby会先计算"Sony" && names.include? "Mac",再把这个结果作为参数传给names.include?,既不符合逻辑预期,还会引发语法错误。and的优先级低于不带括号的方法调用。此时Ruby会先分别执行names.include? "Sony"和names.include? "Mac",再用and判断两个结果的逻辑与,完全符合预期。- 给
include?加上括号后,括号会强制改变执行顺序,让参数传递先于运算符计算,所以不管用&&还是and都能正常运行。
内容的提问来源于stack exchange,提问作者SonyMag
相关产品推荐
相关产品推荐

