Ruby 是否有一个红宝石字符串#空白?方法?
Ruby 是否有一个红宝石字符串#空白?方法?,ruby,Ruby,String#blank?非常有用,但存在于Rails中,而不是Ruby中 Ruby中是否有类似的东西可以替代: str.nil? || str.empty? 假设您的字符串可以被剥离,str.nil有什么问题?或str.strip.empty?如下所示: 2.0.0p0 :004 > ' '.nil? or ' '.strip.empty? => true 比如说: str.to_.s.empty?AFAIK在纯Ruby中没有类似的东西。您可以这样创建自己的: class
String#blank?
非常有用,但存在于Rails中,而不是Ruby中
Ruby中是否有类似的东西可以替代:
str.nil? || str.empty?
假设您的字符串可以被剥离,
str.nil有什么问题?或str.strip.empty?
如下所示:
2.0.0p0 :004 > ' '.nil? or ' '.strip.empty?
=> true
比如说:
str.to_.s.empty?
AFAIK在纯Ruby中没有类似的东西。您可以这样创建自己的:
class NilClass
def blank?
true
end
end
class String
def blank?
self.strip.empty?
end
end
这将适用于nil.blank?
和a_string.blank?
您可以对true/false和general对象进行扩展(就像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
参考资料:
下面是String.blank?
实现,它应该比上一个更有效:
您始终可以完全按照Rails所做的操作。如果查看,您会看到它将以下方法添加到
对象中:
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 14
def blank?
respond_to?(:empty?) ? empty? : !self
end
Ruby中不存在这样的函数,但是有一个关于String#blank?
on的活动建议
同时,您可以使用以下实现:
class String
def blank?
!include?(/[^[:space:]]/)
end
end
此实现将非常高效,即使对于很长的字符串也是如此。任何新用户都可以使用gem。这个gem帮助您在rails的Array、String、Hash等对象上使用所有Ruby核心扩展
require 'simple_ext'
str.blank?
arr.blank?
... etc.
我在参考资料中没有看到类似的内容。请参阅以下答案以获取一些信息:可能的重复:如果Ruby中有这样的东西,那么Rails就不会想出它。String#blank?
不等同于测试nil?
或empty?
,对于只有空格的字符串,它返回true
。这还不够,例如,nil.blank?应该返回true,因为我不知道strip。我已经考虑了您的评论并增强了答案。在这种情况下,使用strip
可能会非常低效。str.to_.strip.empty如何?
该实现可能会更加低效。试一下“一个非常长的字符串……”
只是为了好玩!扩展NilClass是一种糟糕的做法吗?@BSeven是的,而且这个解决方案不能像Rails方法那样处理各种各样的对象。此外,正如Marc Andre所指出的,strip
有点效率低下(特别是当你扔掉输出时)@MarkThomas你所说的各种对象是什么意思?我的答案中的最后一个链接正是您在答案中复制的内容。谢谢您的更新。现在这是一个更好的答案。一个小缺点是:TrueClass
和false class
不需要单独的补丁,因为!self
part会自动处理它。值得一提的是,代码已调整为respond_to?(:empty?)!!空的?:!更新版本中的self
。@someuser,您是对的。在Rails中,上述内容应用于对象
,以便能够处理任何内容的空白?
。但是,它确实依赖于定义的字符串#blank?
,该字符串用于解释带空格的字符串。您可以使用self!~/\S/
用于此。我不知道为什么我没有在这篇5年的帖子上看到这一点。我想我现在更老更聪明了:)