Вызов итератора из итератора - PullRequest
1 голос
/ 22 сентября 2011

Как я могу вызвать итерацию объекта из блока итерации?

# "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}

1 Ответ

1 голос
/ 23 сентября 2011

Этот ответ является копией ответа Джеймса Кибурца на аналогичный вопрос

В рубине этого нет, самая близкая вещь - это я.

Вот несколько примеров, которые помогут вам на вашем пути

#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

...