String#blank?
очень полезен, но существует в Rails, а не Ruby.Есть ли строка Ruby # blank? метод?
Есть ли что-то подобное в Ruby, чтобы заменить:
str.nil? || str.empty?
String#blank?
очень полезен, но существует в Rails, а не Ruby.Есть ли строка Ruby # blank? метод?
Есть ли что-то подобное в Ruby, чтобы заменить:
str.nil? || str.empty?
AfaI K нет ничего подобного в простом Ruby. Вы можете создать свой собственный, как это:
class NilClass
def blank?
true
end
end
class String
def blank?
self.strip.empty?
end
end
Это будет работать для nil.blank?
и a_string.blank?
вы можете расширить это (как рельсам делает) для истинных/ложных и общих объектов:
class FalseClass
def blank?
true
end
end
class TrueClass
def blank?
false
end
end
class Object
def blank?
respond_to?(:empty?) ? empty? : !self
end
end
Ссылки:
https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L57 https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L67 https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L14 https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L47
А вот String.blank?
реализация которых должна быть более эффективной, чем предыдущая:
Эта реализация может быть более неэффективной. Попробуйте «очень длинную строку ...» просто для удовольствия! –
Неудобно ли распространять NilClass? –
@BSEven Да, и это решение не работает с множеством объектов, которые делает метод Rails. Кроме того, как отметил Марк-Андре, «полоса» немного неэффективна (особенно когда вы выбрасываете выход) –
Если предположить, что строка может быть зачищены, что случилось с как в следующем примере:
2.0.0p0 :004 > ' '.nil? or ' '.strip.empty?
=> true
Вы всегда можете сделать именно то, что делает Rails. Если вы посмотрите на the source to blank
, вы видите, это добавляет следующий метод Object
:
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 14
def blank?
respond_to?(:empty?) ? empty? : !self
end
Возможно, стоит упомянуть, что код был скорректирован на 'response_to? (: Empty?)? !! пусто? :! self' в новых версиях. –
Нет такой функции не существует в Ruby, но есть активное предложение для String#blank?
на ruby-core.
В то же время, вы можете использовать эту реализацию:
class String
def blank?
!include?(/[^[:space:]]/)
end
end
Эта реализация будет очень эффективным, даже для очень длинных строк.
Я не вижу ничего подобного в ссылке http://ruby-doc.org/core-2.0/String.html – shishirmk
См. Этот ответ для получения некоторой информации: http://stackoverflow.com/questions/4819899/rails -objectblank-vs-stringempty-confusion – squiguy
Возможный дубликат: http://stackoverflow.com/questions/247948/is-there-a-better-way-of-checking-nil-or-length-0-of-a- string-in-ruby – christianblais