ruby 为什么操作符&&有错误?

70gysomp  于 2023-04-05  发布在  Ruby
关注(0)|答案(1)|浏览(128)

我对Ruby中的语法错误很感兴趣,当我在include?&&中使用括号时,没有什么不好的,但是如果我不使用括号,我就会有语法错误。下面是我的代码示例:

names = ["Sony", "Mac"]
if names.include? "Sony" && names.include? "Mac"
  puts names
end # will be error

names = ["Sony", "Mac"]
if names.include?("Sony") && names.include?("Mac")
    puts names
end # good

names = ["Sony", "Mac"]
if names.include? "Sony" and names.include? "Mac"
  puts names
end # good

你能给我解释一下为什么吗?

vmpqdwk3

vmpqdwk31#

每一种编程语言都需要将有歧义的语句解析为特定的求值顺序。在大多数语言中(包括Ruby)&&具有非常高的优先级,以便匹配数学中的常见约定,其中&&||分别类似于*+A || B && C被计算为A || (B && C)
因此,您的第一个示例被解析为

if names.include?("Sony" && names.include?) "Mac"

这一行中有几个错误,但首先命中语法错误,因为此表达式具有以下形式

if x.y(z) "Mac"

这不是有效的Ruby表达式。
另一方面,and不是用于布尔逻辑,而是用于排序操作,如“do this and do that”。其目的是您可以在Ruby中使用任何两个表达式,并在它们之间放置and,以使第二个表达式以第一个表达式为条件。为了使其工作,and需要非常低的优先级,以便不改变两个表达式的解析方式。
通常建议避免在if语句中使用andor,以避免混淆。

相关问题