ブロック付きメソッドとyield制御構造

ブロック引数について書いた記事があったのですが、間違ってたのでその記事は消しました。
ごめんなさい。

まずは、ブロックについて、勉強やり直します。

ブロック
doからend 又は、{} で囲われた一連の式
class Each_test
  def initialize(a)
    @myarr = a
  end

  def each
    max = @myarr.size - 1
    for i in (0..max) do
      yield(@myarr[i])
    end    
  end
end

test = Each_test.new([0, 1, 2])
test.each{|value| puts value}

この場合、{|value| puts value}がブロック。このブロックはeachメソッドの引数なので、ブロック引数という。

  • Each_test#eachを実行
    • 初期化の際に指定された配列@myarr = ["no", "no", "war"]が対象。
  • yield(@myarr[i])より、@myarr[i]を引数にしたブロック{|value| puts value}を実行。
    • value = @myarr[i]
    • yieldの意味は「譲る」

私が読んでる参考書に「yield制御構造をメソッドの中で呼び出すと、そのメソッドにも与えられたブロックを実行する。」と書いてありました。この「ブロックを実行する」という動きがどうしても想像できなかった。ブロック引数というので、流れとして

  1. {|value| puts value}を#eachへ渡す
  2. 渡されたブロックを受け取る引数がない!!!!

と考えて大混乱してました。