読者です 読者をやめる 読者になる 読者になる

Bonkura - Kenny

SIerで働く文系SEの記録

【たのしいRuby_21】Procクラス

たのしいRubyの第21章を学んだ。

たのしいRuby 第4版

たのしいRuby 第4版

ブロックとして記述された手続きを持ち運ぶためのクラス。

Procクラスとは

  • Proc.newメソッドにブロックを与えると、そのブロックを保持するProcオブジェクトが作られる。
  • ブロックはProc#callメソッドによって実行される。
  • Proc#callメソッドを呼び出した時の引数がブロック変数となる。
  • ブロックで最後に評価された値がProc#callの戻り値となる。
  • ブロック変数を「|*配列|」の形式にすると、不定の引数を配列で受け取る事が出来る。
#うるう年判別処理

leap = Proc.new do |year|
  year % 4 == 0 && year % 100 != 0 || year % 400 == 0
end

p leap.call(2000)
p leap.call(2013)

#要素を二倍にして返す処理

double = Proc.new do |*args|
  args.map{|i| i * 2 }
end

p double.call(1,2,3)

lamda

Proc.newの別の書き方。違いとしては、下記の2つがある。

  • 引数のチェックが厳密になる
  • ブロックから値を返すときにreturnを使える