Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 是否有一个红宝石字符串#空白?方法?_Ruby - Fatal编程技术网

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年的帖子上看到这一点。我想我现在更老更聪明了:)