复制.blank? 在标准的Ruby中

Rails有一个.blank? 方法,如果一个Object是空的,它将返回true? 或无? 实际的代码可以在这里找到。 当我尝试在1.9.2上重复这个操作时:

class Object

  def blank?
    respond_to?(:empty?) ? empty? : !self
  end

end

调用“”.blank? 返回true,但调用“”.blank? 根据rails文档,空白字符串应该为.blank评估为true时返回false? 在我查阅我最初写的代码之前:

class Object

  def blank?
    !!self.empty? || !!self.nil?
  end

end

并有相同的结果。 我错过了什么?


你忘了这个 - https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/blank.rb#L95

class String
  # A string is blank if it's empty or contains whitespaces only:
  #
  #   "".blank?                 # => true
  #   "   ".blank?              # => true
  #   " something here ".blank? # => false
  #
  def blank?
    self !~ /S/
  end
end

String类重写blank?Object实现blank? 在Rails的实现中:

class String

  def blank?
    # Blank if this String is not composed of characters other than whitespace.
    self !~ /S/ 
  end

end

字符串不是empty? 如果他们只有空间

>> "  ".empty?
=> false

因此,你也可以创建

class String
  def blank?
    strip.empty?
  end
end

但仔细想想这个 - 像这样的猴子补丁是很危险的,特别是如果其他模块会使用你的代码。

链接地址: http://www.djcxy.com/p/25799.html

上一篇: Duplicating .blank? in standard Ruby

下一篇: Rails Object#blank? vs. String#empty? confusion