if !row[0].include? 'Changed database' || !row[0].starts_with? '---' || !row[0].include? "rows affected" || !row[0].nil? || !row[0] == ""
如果我这样做
if !row[0].include? 'Changed database'
它运作良好,但如果我做了多个条件,那么它就会出现此错误
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...
答案 0 :(得分: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] == ""
如果你真的非常讨厌括号,你也可以转而使用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] == ""