问题
How can I call for iterating object from iterating block?
# "self" is an Object, and not an iterating object I need.
MyClass.some.method.chain.inject{|mean, i| (mean+=i)/self.size}
I mean I need to do this:
@my_object = MyClass.some.method.chain
@my_object.inject{|mean, i| (mean+=i)/@my_object.size}
回答1:
This answer is a copy of James Kyburz's answer to a similar question
There is no this in ruby the nearest thing is self.
Here are some examples to help you on your way
#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
So far I prefer example 1
来源:https://stackoverflow.com/questions/7511716/call-to-iterating-object-from-iterator