Я считаю себя постоянно ищу четкое определение различий nil?
, blank?
и empty?
в Ruby On Rails. Вот самый близкий я пришел:
blank?
объекты являются ложными, пустыми или пробельными строками. Например,""
," "
,nil
,[]
, и{}
являются пустыми.nil?
объекты являются экземплярами NilClass.empty?
объекты зависят от класса, и определение варьируется от класса к классу. Строка пуста, если в ней нет символов, а массив пуст, если в ней нет элементов.
Чего не хватает, или можно сделать более жесткое сравнение?
ruby-on-rails
ruby
Arrel
источник
источник
present?
. Это потому, чтоblank?
возвращает true для пустого массива.:nil?
определяется на::Kernel
и переопределена::NilClass
, в то время как:empty?
осуществляется отдельно от многих классов (изначально на::String
,::Array
,::Hash
, и не родной на других классах , как::Set
от STDLIB и::ActiveRecord::Relation
от рельсов). Так:nil?
доступно во всех подклассах,::Object
а также в каждом классе, который включает::Kernel
сам по себе, где:empty?
должны быть реализованы или включены конкретно в ваши классы.nil
концепцию, начните здесь .[1] pry(main)> [].blank? => true
Ответы:
.nil?
может использоваться для любого объекта и имеет значение true, если объект равен нулю..empty?
может использоваться для строк, массивов и хэшей и возвращает true, если:Бег
.empty?
на что-то, что ноль, броситNoMethodError
.Это то, где
.blank?
приходит. Он реализован Rails и будет работать с любым объектом, а также работать как.empty?
со строками, массивами и хешами..blank?
также оценивает true для строк, которые не являются пустыми, но содержат только пробелы:Rails также предоставляет
.present?
, который возвращает отрицание.blank?
.Array gotcha:
blank?
вернется,false
даже если все элементы массива пустые. Чтобы определить пустоту в этом случае, используйтеall?
сblank?
, например:источник
false.blank? == true
presence
!Я сделал эту полезную таблицу со всеми делами:
blank?
,present?
предоставляются Rails.источник
any?
если вы когда-нибудь обновите таблицу.blank?
иpresent?
они не « только для Rails », они автоматически включаются Rails, но могут быть легко включены в не-Rails-код с помощью расширений Core ActiveSupport. См. Stackoverflow.com/questions/4238867/…Просто расширите таблицу Джулиана:
Ссылка: пусто? Пусто? Ноль? 傻傻 分不清楚
источник
Enumerable#any?
ванильный рубин, его не следует указывать под.zero?
и.nonzero?
Быстрая подсказка:
!obj.blank? == obj.present?
Может быть удобнее / легче для глаз в некоторых выражениях
источник
present?
является частью active_support, проверьте здесь, что включить, чтобы получить его: stackoverflow.com/a/4648704/1569!!false
Одно из отличий заключается в том, что
.nil?
и.empty?
являются методами, которые предоставляются языком программирования Ruby, тогда как.blank?
это то, что добавляется фреймворком веб-разработки Rails.источник
nil?
естьblank?
empty?
естьblank?
empty?
естьnil?
nil?
естьempty?
tl; dr - используйте только
blank?
&,present?
если вы не хотите различать""
и" "
источник
Особый случай - при попытке оценить, является ли логическое значение нулевым:
В этом случае рекомендуется использовать
.nil?
источник
Просто небольшая заметка о
any?
рекомендации: он прав, что это в целом эквивалентно!empty?
. Тем не менее,any?
вернемсяtrue
к строке просто пробела (аля" "
).И, конечно же, см. Выше комментарий 1.9.
источник
Не забывайте,
any?
что вообще!empty?
. В Rails я обычно проверяю наличие чего-либо в конце оператораif something
илиunless something
затем использую егоblank?
там, где это необходимо, поскольку это, кажется, работает везде.источник
any?
для проверки не пустоты. Он возвращает false, если у вас есть массив ложных значений. Способ обойти это - пропустить всегда истинный блок:,[nil, false].any?{ true }
но!empty?
он короче, и вы не помните странное поведение.nil?
стандартный метод Ruby, который может быть вызван для всех объектов и возвращается,true
если объектnil
:empty?
является стандартным методом Ruby, который можно вызывать для некоторых объектов, таких как Strings, Arrays и Hashes, и возвращает,true
если эти объекты не содержат элементов:empty?
нельзя вызывать наnil
объекты.blank?
является методом Rails, который можно вызыватьnil
как для объектов, так и для пустых объектов.источник
Все остальные хорошо объяснили, в чем разница.
Я хотел бы добавить в Ruby On Rails, лучше использовать
obj.blank?
илиobj.present?
вместоobj.nil?
илиobj.empty?
.obj.blank?
обрабатывает все типыnil
,''
,[]
,{}
, и возвращается ,true
если значения не доступны и возвращает ,false
если значения доступны на любом типе объекта.источник
exists?
Метод может быть использован для проверки наличия данных в базе данных или нет. Он возвращает логические значения либоtrue
илиfalse
.источник
Рельсы 4
альтернатива массиву @ corban-brook 'Получил : пусто?' для проверки, содержит ли массив только пустые значения и может ли он рассматриваться как пустой? правда:
можно также сделать:
источник
nil?
можно использовать на любом объекте. Он определяет, имеет ли объект какое-либо значение или нет, включая «пустые» значения.Например:
По сути
nil?
, когда-либо вернет true, только если объект на самом деле равен 'nil'.empty?
вызывается только для объектов, которые считаются коллекцией. Это включает в себя такие вещи, как строки (набор символов), хэши (набор пар ключ / значение) и массивы (набор произвольных объектов).empty?
возвращает true, если в коллекции нет элементов.Например:
Обратите внимание, что
empty?
нельзя вызывать объекты nil, поскольку объекты nil не являются коллекцией, и это вызовет исключение.Также обратите внимание, что даже если элементы в коллекции пустые, это не означает, что коллекция пуста.
blank?
это в основном комбинацияnil?
иempty?
это полезно для проверки объектов, которые вы считаете коллекциями, но они также могут быть нулевыми.источник