Нужно ли ссылаться на себя в: yield (self [i]) - PullRequest
0 голосов
/ 16 сентября 2009

В этом примере из поста в блоге ,

class Array
  def each
    i = 0
    while(i < self.length) do
      yield(self[i])
      i += 1
    end
  end
end

my_array = ["a", "b", "c"]
my_array.each {|letter| puts letter }
# => "a"
# => "b"
# => "c"

Нужно ли использовать self в утверждении:

yield(self[i])

Или было бы хорошо просто сказать:

yield i

Ответы [ 2 ]

4 голосов
/ 16 сентября 2009

Это две совершенно разные вещи. Если вы сделаете yield i, вы на самом деле получите число i, что приведет к выводу 1 2 3. Однако смысл кода состоит в том, чтобы получить элементы массива, поэтому вы получите self[i], что означает " i-й элемент массива self "или, более технически," вызывает метод [] on self с аргументом i и выдает результат ".

2 голосов
/ 16 сентября 2009

yield(i) даст блок для индекса, а yield(self[i]) даст блок для i-го элемента

...