使用any检查数组是否不为空是不好的吗?方法?

a = [1,2,3]

a.any?
=> true

a.clear

a.any?
=> false

还是用unless。empty更好??


当前回答

在语句前面加上感叹号可以让您知道数组是否为空。所以在你的情况下

a = [1,2,3]
!a.empty?
=> true

其他回答

我不认为用它有什么不好?在所有。我经常用它。它清晰而简洁。

然而,如果你关心的是所有的nil值抛出它,那么你实际上是在问数组的大小是否为> 0。在这种情况下,这个非常简单的扩展(没有优化,猴子风格)会让你接近。

Object.class_eval do

  def size?
    respond_to?(:size) && size > 0
  end

end

> "foo".size?
 => true
> "".size?
 => false
> " ".size?
 => true
> [].size?
 => false
> [11,22].size?
 => true
> [nil].size?
 => true

这是相当描述性的,逻辑上问“这个对象有大小吗?”它很简洁,不需要ActiveSupport。而且很容易建立在它的基础上。

一些额外的考虑:

这和现在不一样吗?从ActiveSupport这样。 你可能想要一个String的自定义版本,忽略空白(比如present?做)。 您可能需要名称长度?String或其他可能更具描述性的类型。 您可能希望它为Integer和其他Numeric类型自定义,以便逻辑0返回false。

任何?不就等于不空吗?在某些情况下。

>> [nil, 1].any?
=> true
>> [nil, nil].any?
=> false

从文档中可以看到:

如果没有给出块,Ruby会补充 {|obj| obj}的隐式块 是吗?将返回true如果至少 集合成员中有一个不是 False或nil)。

我建议使用unless和blank来检查是否为空。

例子:

unless a.blank?
  a = "Is not empty"
end

这将知道'a'是否为空。 如果'a'为空,则下面的代码将无法运行。

在语句前面加上感叹号可以让您知道数组是否为空。所以在你的情况下

a = [1,2,3]
!a.empty?
=> true

一个数组将其值赋值为true或赋值为空之间的区别。

方法为空?来自Array类 http://ruby-doc.org/core-2.0.0/Array.html#method-i-empty-3F

它用于检查数组是否包含某些内容。这包括值为false的东西,比如nil和false。

>> a = []
=> []
>> a.empty?
=> true
>> a = [nil, false]
=> [nil, false]
>> a.empty?
=> false
>> a = [nil]
=> [nil]
>> a.empty?
=> false

有什么方法吗?来自Enumerable模块。 http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-any-3F

它用于计算数组中的“any”值是否为true。 类似的方法是没有?,所有?和一个吗?,它们都只是检查true可以被求值的次数。它与数组中找到的值的计数无关。

案例1

>> a = []
=> []
>> a.any?
=> false
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> true

案例2

>> a = [nil, true]
=> [nil, true]
>> a.any?
=> true
>> a.one?
=> true
>> a.all?
=> false
>> a.none?
=> false

案例3

>> a = [true, true]
=> [true, true]
>> a.any?
=> true
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> false