Являются ли они одинаковыми при использовании в инструкции if/else/end
? Что ты обычно делаешь? Мне интересно, есть ли какие-либо тонкие различия или случаи краев, где object
и !object.nil?
будут реагировать по-разному.
Ruby: "if! Object.nil?" или "если объект"
Ответ 1
Есть различия. Например:
false.nil?
# => false
Итак:
if !false.nil?
'foo'
end
# => "foo"
if false
'foo'
end
# => nil
Как пояснил @tokland, в большинстве случаев использование !obj.nil?
не требуется.
Ответ 2
Существует один и только один случай, когда !object.nil?
и object
оценивают разные результаты в булевом контексте, а именно, если object
- false
. Во всех остальных ситуациях результат одинаков.
С этим я думаю, что мы можем ответить на ваш реальный вопрос (а именно: есть ли ситуация, когда я должен использовать if !object.nil?
вместо if object
при защите от object
, равного нулю?):
Нет, вы всегда можете использовать if object
, если хотите проверить с помощью nil
.
Ответ 3
if object
проверяет, если object
не является nil
или false
.
!object.nil?
проверяет, если object
не nil
. (Rubydoc)
Поэтому, когда object
есть false
, они имеют разные значения.
Ответ 4
Ну. if object
будет отличаться от if !object.nil?
, если object=false
.
Что об этом.
Ответ 5
Объекты могут переопределять nil?
, но они не могут быть ложными, если они не равны нулю или false. Лично я использую nil?
или ActiveSupport present?
, чтобы я поддерживал эту гибкость. Я также думаю, что это немного лучше.