Определения NilClass - PullRequest
       2

Определения NilClass

1 голос
/ 26 июля 2010

Мне надоело ловить ноль при поиске зависимой записи, когда в большинстве случаев времени возвращение 0 будет хорошо. Какие неприятности я создаю для себя, добавляя id в NilClass, таким образом

class NilClass
  def id
    0
  end
end

Какими могут быть непредвиденные последствия? Я знаю о существовании? (), Но почему-то думал, что это может быть чище.

Ваши мысли?

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Если у вас действительно есть проблема с этим, вы должны использовать ссылочную целостность в вашей базе данных.

Если вы должны вызывать методы для nil, которые могут существовать или не существовать, или выдавать какую-то ошибку, вы должны использовать либо проверку а-ля

 > nil.id if nil
=> nil

или Object#try (который в настоящее время является частью ActiveSupport, я верю?), Будьте осторожны - я считаю, что это своего рода запах кода.

 > nil.try(:id)
=> nil 

Это, как говорится, менее неприятно, чем модифицировать NilClass, чтобы сделать что-то неожиданное, подумать о том, чего ожидает новый разработчик, который должен был работать над вашим проектом.

1 голос
/ 26 июля 2010

Не означает ли это, что вам нужно будет проверить "id == 0", чтобы подтвердить существование?Не говоря уже о непреднамеренных последствиях переопределения базовой функциональности Ruby - становится очень трудно предсказать поведение других библиотек и основных API-интерфейсов Rails, когда вы связываетесь с внутренними языковыми компонентами.Не говоря уже о том, что это не сработает, но трудно быть уверенным .

Я бы оставил значение по умолчанию - оно прекрасно работает, поскольку Ruby допускает выражения «if object.association».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...