Rubyのブロック付きのメソッド
Rubyでブロック付きのメソッドを作ってみます。
def func(value1, value2) puts "value1 : #{value1}, value2 : #{value2}" a = value1 + value2 b = value1 - value2 c = value1 * value2 d = value1 / value2 yield(a, b, c, d) if block_given? return a, b, c, d end puts 'メソッドをブロック付きで実行' func(1, 2) do |a1, b1, c1, d1| puts "a1 : #{a1}" puts "b1 : #{b1}" puts "c1 : #{c1}" puts "d1 : #{d1}" end puts 'メソッドをブロックなしで実行' a2,b2,c2,d2 = func(10, 20) puts "a2 : #{a2}" puts "b2 : #{b2}" puts "c2 : #{c2}" puts "d2 : #{d2}"
yieldは、定義したブロック付きメソッドでブロックを呼び出します。
block_given?は、メソッドにブロックがあればtrueを返します。
実行結果
メソッドをブロック付きで実行 value1 : 1, value2 : 2 a1 : 3 b1 : -1 c1 : 2 d1 : 0 メソッドをブロックなしで実行 value1 : 10, value2 : 20 a2 : 30 b2 : -10 c2 : 200 d2 : 0