方法`each`给出相互矛盾的结果

时间:2015-07-02 15:52:57

标签: ruby

我正在解决一些RubyMonk问题。问题是如果传递给方法的数组中的所有元素都是true,则编写一个返回Fixnum的方法。我想出的解决方案是:

arr = [1,2,3]
def array_of_fixnums?(array)
  array.each.is_a? Fixnum
end
puts array_of_fixnums?(arr)

这会返回false,我不明白为什么。我使用了这段代码,这让我更加困惑:

arr = [1,2,3]
arr.each do |x|
  puts "#{x}, #{x.is_a? Fixnum}"
end
exit

返回:

1, true
2, true
3, true

如果有人能够解释这个问题,我将非常感谢澄清。

1 个答案:

答案 0 :(得分:7)

each返回集合的Enumerator进行迭代,所以

Enumerator.is_a? Fixnum # => false

试试这个:

def array_of_fixnums?(array)
  array.all? { |x| x.is_a? Fixnum }
end