Duplicating .blank? in standard Ruby
Rails有一个.blank? 如果Object为空,将返回true的方法? 还是没有? 可以在此处找到实际的代码。 当我尝试1.9.2通过执行以下操作来复制它:
1 2 3 4 5 6 7 | class Object def blank? respond_to?(:empty?) ? empty? : !self end end |
调用".blank?返回true但调用".blank?返回false,根据rails文档,空格字符串应该为.blank eval为true?在我查找我最初编写的代码之前:
1 2 3 4 5 6 7 | 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
1 2 3 4 5 6 7 8 9 10 11 | 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 |
1 2 3 4 5 6 7 8 | class String def blank? # Blank if this String is not composed of characters other than whitespace. self !~ /\S/ end end |
如果字符串只有空格,则不会被归类为
1 2 | >>" ".empty? => false |
因此,您可能还希望创建
1 2 3 4 5 | class String def blank? strip.empty? end end |
但仔细考虑一下 - 像这样的猴子修补是危险的,特别是如果其他模块将使用你的代码。