山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

プロを目指す人のためのRuby入門 その19

第10章 yield と Proc を理解する

今回から新しい章です。

yield

引数として受け取ったブロックを呼び出すために yield が使われます。

def greeting
  puts 'おはよう'
  # ブロックの有無を確認してから yield を呼び出す
  if block_given?
    yield
  end
  puts 'こんばんは'
end

greeting

greeting do
  puts 'こんにちは'
end

call メソッドを使ってブロックを実行することができます。

def greeting(&block)
  puts 'おはよう'
  # call メソッド使ってブロックを実行する
  text = block.call('こんにちは')
  puts text
  puts 'こんばんは'
end

greeting do |text|
  text * 2
end

Proc

ブロックをオブジェト化するために Proc クラスを使います。

hello_proc = Proc.new { puts 'Hello' }
hello_proc.call

proc と lambda の違いは、lambda は引数が過不足なく渡される必要があるということです。