nil?
можно использовать на любом объекте. Он определяет, имеет ли объект какое-либо значение или нет, включая «пустые» значения.
Например:
example = nil
example.nil? # true
"".nil? # false
По сути nil?
, когда-либо вернет true, только если объект на самом деле равен 'nil'.
empty?
вызывается только для объектов, которые считаются коллекцией. Это включает в себя такие вещи, как строки (набор символов), хэши (набор пар ключ / значение) и массивы (набор произвольных объектов). empty?
возвращает true, если в коллекции нет элементов.
Например:
"".empty? # true
"hi".empty? # false
{}.empty? # true
{"" => ""}.empty? # false
[].empty? # true
[nil].empty? # false
nil.empty? # NoMethodError: undefined method `empty?' for nil:NilClass
Обратите внимание, что empty?
нельзя вызывать объекты nil, поскольку объекты nil не являются коллекцией, и это вызовет исключение.
Также обратите внимание, что даже если элементы в коллекции пустые, это не означает, что коллекция пуста.
blank?
это в основном комбинация nil?
и empty?
это полезно для проверки объектов, которые вы считаете коллекциями, но они также могут быть нулевыми.
present?
. Это потому, чтоblank?
возвращает true для пустого массива.:nil?
определяется на::Kernel
и переопределена::NilClass
, в то время как:empty?
осуществляется отдельно от многих классов (изначально на::String
,::Array
,::Hash
, и не родной на других классах , как::Set
от STDLIB и::ActiveRecord::Relation
от рельсов). Так:nil?
доступно во всех подклассах,::Object
а также в каждом классе, который включает::Kernel
сам по себе, где:empty?
должны быть реализованы или включены конкретно в ваши классы.nil
концепцию, начните здесь .[1] pry(main)> [].blank? => true