2011-09-06 18 views
2
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... 

答えて

7

に失敗します議論あなたの例では

、それは引数がinclude?に渡されたとして'Changed database' || !row[0].starts_with?を解釈だし、それはその後、意味をなさない次のトークン、'---'、全体に来るとき窒息されます。

例えば、問題を解決するあいまいさを解消するために、括弧を追加:

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] == "" 
+0

大きな '(around around) 'も同様に動作します。 –

+1

または '||'の代わりに 'または'を使うと、優先度が低くなります。 – RocketR

+0

それで、Rubyの "optional"カッコはそれほどオプションではありません。カッコレスDSLを書くのはいいと思うが、そうでなければそれほど素晴らしい考えではないと認めなければならない。 – tokland

関連する問題