Call to iterating object from iterator

≡放荡痞女 提交于 2019-12-24 10:04:44

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!