2012-03-08 2 views

ответ

8

Нет, оба оператора имеют такой же эффект, но различный приоритет.

Оператор || имеет очень высокий приоритет, поэтому он очень сильно привязывается к предыдущему значению. Оператор or имеет очень низкий приоритет, поэтому он связывается менее плотно, чем другой оператор.

Причина наличия двух версий - это то, что имеет высокий приоритет, а другой имеет низкий приоритет, поскольку это удобно.

+0

так что если первое утверждение будет оценивать что-то вроде ("[" || line.strip.empty?) = "[", А затем (line.start_with? "["). – surajz

+1

Точно так. Приоритет - это способ угадать, что вы имели в виду, когда вы опускаете, например, скобки. Так же, как и математическое преимущество. –

1

Даниэль прав, более четко:

if (line.start_with?("[") || line.strip.empty?) 
    puts "yes" 
end 

будет производить yes

3

В первом случае вы использовали || которым оценивается до, чем все остальное в заявлении в связи с преимущественной хорошо высказанной другими ответившим, что делает его более четким, с добавлением некоторых скобка, ваше первое утверждение как:

(line.start_with? ("[" || line.strip.empty?)) 

которым переводится

(line.start_with? ("[")) 

результате FALSE

в другой стороны, ваше второе заявление переводится

((line.start_with? "[") or line.strip.empty?) 

которым переводятся

(FALSE or TRUE) 

в результате истинного

Вот почему я стараюсь использовать скобку каждый раз вызвать функцию. :-)

Смежные вопросы