为什么我不能在红宝石中这样做?

Mat*_*iby 2 ruby

  if !row[0].include? 'Changed database' || !row[0].starts_with? '---' || !row[0].include? "rows affected" || !row[0].nil? || !row[0] == ""
Run Code Online (Sandbox Code Playgroud)

如果我做

if !row[0].include? 'Changed database'
Run Code Online (Sandbox Code Playgroud)

它运作良好,但如果我做了多个条件,那么它就失败了这个错误

SyntaxError: /Users/tamer/Sites/active/app/models/account.rb:42: syntax error, unexpected tSTRING_BEG, expecting kTHEN or ':' or '\n' or ';'
 ...ase' || !row[0].starts_with? '---' || !row[0].include? "rows...
Run Code Online (Sandbox Code Playgroud)

num*_*407 7

有时,解析器无法猜测您如何对参数进行分组.

在您的示例中,它将解释'Changed database' || !row[0].starts_with?为传递给的参数include?,并且在遇到下一个令牌时会发生窒息'---',这样就没有意义了.

添加括号以消除歧义将解决问题,例如:

if !row[0].include?('Changed database') || !row[0].starts_with?('---') || !row[0].include?("rows affected") || !row[0].nil? || !row[0] == ""
Run Code Online (Sandbox Code Playgroud)

如果你真的非常讨厌括号,你也可以切换到使用or而不是||,优先级较弱,稍后会应用,例如:

if !row[0].include? 'Changed database' or !row[0].starts_with? '---' or !row[0].include? "rows affected" or !row[0].nil? or !row[0] == ""
Run Code Online (Sandbox Code Playgroud)