Rubyメモ

yieldと無名ブロック

最終更新:

匿名ユーザー

- view
管理者のみ編集可

メソッドにブロックを渡してyieldで実行


Rubyの特徴のひとつがyield。これがあるから、eachとか、10.items do等が実現できる。
メソッドkurikaesiにパラメタのようなイメージでdo~endのブロックをを渡し、yieldを呼び出した次点でその部分を実行する。
Javaの無名クラスの強化版というか簡単版のようなものか。

def kurikaesi
    yield
    yield
end


kurikaesi do
  puts 'Hello'
end

同様の処理をCで記述すると以下のように関数ポインタを利用することになる。

void greeting(void)
{
    puts ("Hello");
}

void kurikaeshi(void (*pfunc)(void))
{
    pfunc();
    pfunc();
}

main()
{
    kurikaeshi(greeting);
}
~
~

yieldの後にパラメタを指定して、ブロック側で受け取るには
ブロック側でdoの直後に|変数|をつける。

def kurikaesi2
    yield 1
    yield 2
end


kurikaesi2 do |i|
  puts i
end
目安箱バナー