any?
用于迭代容器,例如数组,并检查传递给它的每个元素是否通过了测试。如果有一个元素通过了测试,循环就会停止并返回true
:
ary = [nil, 1]
ary.any?{ |e| e.nil? }
文档 解释得很清楚:
将集合的每个元素传递给给定的块。如果块返回除false或nil之外的值,则该方法返回true。如果没有给出块,则Ruby会添加一个隐式块 { |obj| obj },如果集合成员中至少有一个不是false或nil,any? 将返回true。
%w[ant bear cat].any? { |word| word.length >= 3 }
%w[ant bear cat].any? { |word| word.length >= 4 }
[nil, true, 99].any?
any?
是可以应用于数组的多个测试之一,用于确定是否存在none?
、any?
、one?
或all?
。
ary.one?{ |e| e == 1 }
ary.none?{ |e| e == 2 }
ary.all? { |e| e.nil? }
你的代码失败是因为你试图在空值上使用不存在的any?
方法,因此出现了错误:"NoMethodError: undefined method `any?' for nil:NilClass"
ary[0]
ary.first
ary.first.respond_to?(:'any?')
你必须注意你正在做什么。ary[0]
或者array.first
仅会返回该数组索引处的元素,而不是一个数组。
empty?
仅检查容器中是否有元素。换句话说,它是否具有大小> 0?
ary.empty?
ary.size == 0
ary.size > 0
[].empty?
[].size == 0
[].size > 0
args.any?(&:nil?)
对我来说更好看。 - Alex Strizhak