Подтвердить что ты не робот

Ruby: "if! Object.nil?" или "если объект"

Являются ли они одинаковыми при использовании в инструкции if/else/end? Что ты обычно делаешь? Мне интересно, есть ли какие-либо тонкие различия или случаи краев, где object и !object.nil? будут реагировать по-разному.

4b9b3361

Ответ 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?, чтобы я поддерживал эту гибкость. Я также думаю, что это немного лучше.