从迭代器调用迭代对象

如何从迭代块中调用迭代对象?

# "self" is an Object, and not an iterating object I need. MyClass.some.method.chain.inject{|mean, i| (mean+=i)/self.size} 

我的意思是我需要这样做:

 @my_object = MyClass.some.method.chain @my_object.inject{|mean, i| (mean+=i)/@my_object.size} 

这个答案是James Kyburz 对类似问题的回答

ruby中没有这个,最接近的是自我。

以下是一些可以帮助您的示例

 #example 1 not self needed numbers is the array numbers = [1, 2, 3] numbers.reduce(:+).to_f / numbers.size # example 2 using tap which gives access to self and returns self # hence why total variable is needed total = 0 [1, 2, 3].tap {|a| total = a.reduce(:+).to_f / a.size } # instance_eval hack which accesses self, and the block after do is an expression # can return the average without an extra variable [1, 2, 3].instance_eval { self.reduce(:+).to_f / self.size } # => 2.0 

到目前为止,我更喜欢示例1