我对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
你能给我解释一下为什么吗?
1条答案
按热度按时间vmpqdwk31#
每一种编程语言都需要将有歧义的语句解析为特定的求值顺序。在大多数语言中(包括Ruby)
&&
具有非常高的优先级,以便匹配数学中的常见约定,其中&&
和||
分别类似于*
和+
。A || B && C
被计算为A || (B && C)
。因此,您的第一个示例被解析为
这一行中有几个错误,但首先命中语法错误,因为此表达式具有以下形式
这不是有效的Ruby表达式。
另一方面,
and
不是用于布尔逻辑,而是用于排序操作,如“do this and do that”。其目的是您可以在Ruby中使用任何两个表达式,并在它们之间放置and
,以使第二个表达式以第一个表达式为条件。为了使其工作,and
需要非常低的优先级,以便不改变两个表达式的解析方式。通常建议避免在
if
语句中使用and
和or
,以避免混淆。