当我尝试如下用select
和num.even?
调用方法时,
def selection(array)
puts "This is inside the method"
return yield(array)
end
collection = [1,2,3,4,5]
selection(collection.select) { |num| num.even? }
我收到一个未定义的方法错误:
undefined method `even?' for #<Enumerator: [1, 2, 3, 4, 5]:select>
我正在寻找数组中偶数的返回。在数组的其他示例中,我可以获得select
even?
组合工作。
答案 0 :(得分:1)
System.DirectoryServices.ActiveDirectory
返回一个Array#select
实例(如果未分配块)Enumerator
方法,将调用结果传递给selection
作为参数,并将collection.select
作为块{ |num| num.even? }
函数内,您selection
将该块的参数(一个yield
实例)Enumerator
的代码块中,导致收到错误消息。我不确定even?
出了什么问题,但是如果您想自己重新实现,请执行以下操作:
collection.select(&:even?)
答案 1 :(得分:0)
yield(array)一次将整个数组传递给该方法提供的块,因此它试图调用偶数?在阵列上。
答案 2 :(得分:0)
您看到此错误是因为要将枚举器对象传递到“选择”方法中……也就是说,“ collection.select”的结果是一个枚举器,而枚举器没有实现“偶数”方法。
我相信您正在尝试实现自己的“选择”版本。以下是一种实现您的意图的方法:“我正在寻找数组中偶数的返回。”
def selection(array)
results = []
for item in array do
results << item if yield item
end
results
end
collection = [1,2,3,4,5]
puts selection(collection) { |num| num.even? }
# => [2,4]
https://mixandgo.com/learn/mastering-ruby-blocks-in-less-than-5-minutes是一个很好的参考