2011-09-06 11 views
2
if !row[0].include? 'Changed database' || !row[0].starts_with? '---' || !row[0].include? "rows affected" || !row[0].nil? || !row[0] == "" 

가끔 파서가 어떻게 그룹화하고 추측 할 수는 잘 작동하지만 난 다음에 여러 조건을 경우이 오류왜 내가 루비에서 이것을 할 수 없습니까?

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

에 실패

if !row[0].include? 'Changed database' 

을 할 경우 인수. 당신의 예에서

, 그것은 인수가 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

그래서 루비의 "선택적"괄호는 그렇게 선택 사항이 아닙니다. 괄호없는 DSL을 작성하는 것이 좋다고 인정해야하지만, 그렇게 좋은 생각은 아닙니다. – tokland

관련 문제