Я считаю себя постоянно ищу четкое определение различий nil?
, blank?
и empty?
в Ruby On Rails. Вот самый близкий я пришел:
blank?
объекты являются ложными, пустыми или пробельными строками. Например,""
," "
,nil
,[]
, и{}
являются пустыми.nil?
объекты являются экземплярами NilClass.empty?
объекты зависят от класса, и определение варьируется от класса к классу. Строка пуста, если в ней нет символов, а массив пуст, если в ней нет элементов.
Чего не хватает, или можно сделать более жесткое сравнение?
:nil?
определяется на ::Kernel
и переопределена ::NilClass
, в то время как :empty?
осуществляется отдельно от многих классов (изначально на ::String
, ::Array
, ::Hash
, и не родной на других классах , как ::Set
от STDLIB и ::ActiveRecord::Relation
от рельсов). Так :nil?
доступно во всех подклассах, ::Object
а также в каждом классе, который включает ::Kernel
сам по себе, где :empty?
должны быть реализованы или включены конкретно в ваши классы.
nil
концепцию, начните здесь .
[1] pry(main)> [].blank? => true
present?
. Это потому, чтоblank?
возвращает true для пустого массива.