Ruby语法“OR”运算符

时间:2015-07-31 01:17:57

标签: ruby-on-rails ruby syntax-error

我有一个Rails项目,其中一个类有:

def include_stuff?(str)
  str.include? '.' || str.include? '-'
end

哪个只是给我:

syntax error, unexpected tSTRING_BEG, expecting keyword_end (SyntaxError)
cpf.include? '.' || cpf.include? '-'
                                  ^

我将代码更改为:

def include_stuff?(str)
  str.include? '.' or str.include? '-'
end

没有抛出任何错误。

我也尝试了这一点,并取得了成功:

def include_stuff?(str)
  str.include?('.') || str.include?('-')
end

为什么Ruby不能用双管道理解语句,但可以理解or运算符的语句。

我正在使用Ruby 2.2.2

2 个答案:

答案 0 :(得分:3)

由于优先级,

||or在Ruby中并不相同(请参阅Difference between "or" and || in Ruby?)。

所以你的陈述:

str.include? '.' or str.include? '-'

实际上相当于:

str.include?('.' || str.include?('-'))

答案 1 :(得分:2)

这与运营商优先级有关。 or远低于||

它正在尝试将cpf.include? '.' || cpf.include? '-'解析为cpf.include?('.' || cpf.include? '-' )并因第二个include?没有括号而感到困惑。

"Custom filter:" example of the input key filter

注意or||不是一回事。

请参阅http://www.techotopia.com/index.php/Ruby_Operator_Precedence

  

结论

     

andor尽管与&&||明显相似,却扮演着截然不同的角色。和/或是控制流修饰符,如ifunless。当以这种身份使用时,他们的低优先权是美德而不是烦恼。