последовательность условий рубина - PullRequest
0 голосов
/ 05 августа 2011

У меня сложилось впечатление, что условия, объединенные с &&, были выполнены последовательно, так что следующее вернет true:

a = "adasd"
> b = a && b.present?
 => false 

Мысли

Спасибо! --Peter

  • Примечание:

    b = a => "adasd"

    b.present? => правда

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

Когда вы говорите это:

b = a && b.present?

Вы объявляете b как локальную переменную, но она будет nil, пока не будет оценена правая часть назначения. В частности, b будет nil, когда вы назовете present?, и соединение будет ложным, делая b ложным.

Когда вы делаете это:

a = 'pancakes'
b = a
b.present?

b будет иметь значение 'pancakes' при вызове present?, поэтому вы получите истинное возвращение от b.present?.

0 голосов
/ 05 августа 2011

Согласно документу rails

проверяется, не является ли переменная непустойкак он видит, так что b будет в области видимости, но без значения, поэтому present вернет false.

Возможно, вам следует сравнить это с defined?

a = "abc"
=> "abc"
defined? a
=> "local-variable"
defined? b
=> nil
b = defined? b
=> "local-variable"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...