||在Ruby中-意外的关键字结束

||在Ruby中-意外的关键字结束,ruby,Ruby,我想我遗漏了一些琐碎的东西,但由于某些原因,此代码无法工作,并给出了一个意外的关键字end错误: if @quote.user.email.include? "test" || @quote.user.email.include? "test2" email = "" else email = @quote.user.email end 但是,如果我像这样将每条语句都用括号括起来,这是可行的 if (@quote.user.email.include? "test") || (

我想我遗漏了一些琐碎的东西,但由于某些原因,此代码无法工作,并给出了一个意外的关键字end错误:

if @quote.user.email.include? "test" || @quote.user.email.include? "test2"
    email = ""
else
    email = @quote.user.email
end
但是,如果我像这样将每条语句都用括号括起来,这是可行的

if (@quote.user.email.include? "test") || (@quote.user.email.include? "test2")
    email = ""
else
    email = @quote.user.email
end

为什么会这样

编译器无法告诉您要做什么

@quote.user.email.include? "test" || @quote.user.email.include? "test2"
是非常不明确的,因此编译器试图弄清楚这意味着什么

@quote.user.email.include?("test") || @quote.user.email.include?("test2")
@quote.user.email.include?("test" || @quote.user.email.include?) "test2"
@quote.user.email.include?("test" || @quote.user.email.include?("test2"))
(@quote.user.email.include? "test") || (@quote.user.email.include? "test2")
在这种情况下,编译器将首选项授予
运算符,这是第二种情况。这是无效语法,因此会引发错误

省去parens(西雅图风格的语法)是很方便的,但有时它会变得太模糊,您需要使用它们

我建议在方法参数中添加paren

@quote.user.email.include?("test") || @quote.user.email.include?("test2")

编译器无法告诉你要做什么

@quote.user.email.include? "test" || @quote.user.email.include? "test2"
是非常不明确的,因此编译器试图弄清楚这意味着什么

@quote.user.email.include?("test") || @quote.user.email.include?("test2")
@quote.user.email.include?("test" || @quote.user.email.include?) "test2"
@quote.user.email.include?("test" || @quote.user.email.include?("test2"))
(@quote.user.email.include? "test") || (@quote.user.email.include? "test2")
在这种情况下,编译器将首选项授予
运算符,这是第二种情况。这是无效语法,因此会引发错误

省去parens(西雅图风格的语法)是很方便的,但有时它会变得太模糊,您需要使用它们

我建议在方法参数中添加paren

@quote.user.email.include?("test") || @quote.user.email.include?("test2")

因为运算符优先级很重要。这也会起作用(而且是正确的方法):
@quote.user.email.include?('test')| |@quote.user.email.include?('test2')
您能详细说明这会如何影响执行吗?我更熟悉Java,这种语法在那里会像预期的那样工作。@SergioTulentsev这是有道理的。@CannonMoyer:要消除歧义,必须使用parens。如果没有歧义,您可以省略它们。因为运算符优先级很重要。这也会起作用(而且是正确的方法):
@quote.user.email.include?('test')| |@quote.user.email.include?('test2')
您能详细说明这会如何影响执行吗?我更熟悉Java,这种语法在那里会像预期的那样工作。@SergioTulentsev这是有道理的。@CannonMoyer:要消除歧义,必须使用parens。如果没有歧义,您可以省略它们。上面的运算符不是
。实际上,
不会有任何语法错误。不过,这并不意味着应该使用它。西雅图风格的语法---哈哈。你心目中有特定的公司/群体吗?@Stefan我明白了。我不知道。我没有想到“西雅图风格”,这就是它的名字。上面的操作符不是
。实际上,
不会有任何语法错误。不过,这并不意味着应该使用它。西雅图风格的语法---哈哈。你心目中有特定的公司/群体吗?@Stefan我明白了。我不知道。我没有想到“西雅图风格”这个名字,这就是它的名字lol