String#blank?
非常有用,但存在于 Rails 中,而不是 Ruby。
Ruby中是否有类似的东西来替换:
str.nil? || str.empty?
AFAIK 在普通的 Ruby 中没有这样的东西。您可以像这样创建自己的:
class NilClass
def blank?
true
end
end
class String
def blank?
self.strip.empty?
end
end
这将适用于nil.blank?
并且a_string.blank?
您可以将其扩展(就像 rails 一样)用于真/假和一般对象:
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/2a371368c91789a4d689d 6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L57 https://github.com/rails/rails/blob/2a371368c91789a4d689d6a864eb320b238c/ lib /active_support/core_ext/object/blank.rb#L67 https://github.com/rails/rails/blob/2a371368c91789a4d689d 6a84eb20b238c37678a/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?
应该比前一个更有效的实现:
你总是可以做 Rails 做的事情。如果您查看源代码blank
,您会看到它添加了以下方法Object
:
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 14
def blank?
respond_to?(:empty?) ? empty? : !self
end
Ruby 中不存在这样的功能,但String#blank?
在ruby-core上有一个积极的提议。
同时,您可以使用此实现:
class String
def blank?
!include?(/[^[:space:]]/)
end
end
这种实现将非常有效,即使对于很长的字符串也是如此。
假设您的字符串可以被剥离,有什么问题str.nil? or str.strip.empty?
如下:
2.0.0p0 :004 > ' '.nil? or ' '.strip.empty?
=> true
怎么样的东西:
str.to_s.empty?
任何新寻找这个的人,都可以使用simple_ext gem。这个 gem 可以帮助你在 Rails 中的 Array、String、Hash 等对象上使用所有 Ruby 核心扩展。
require 'simple_ext'
str.blank?
arr.blank?
... etc.