ようへいの日々精進XP

よかろうもん

2018 年 02 月 12 日(月)

ジョギング

  • 香椎浜 2 周
  • 終始息苦しくて辛かった

日課

  • (腕立て x 50) x 3
  • 腰痛が長引いている

夕飯

  • 奥さんの得意料理の一つであるビーフシチュー
  • 先日頂いた赤ワインを少し入れてみたら、お肉がとても柔らかくジューシーに仕上がっていた

平昌オリンピック

  • メダルラッシュ、感動して泣けた
  • 政治利用しようとしている輩がいるというのは、血のにじむような努力をして、このオリンピックに掛けてきた選手たちに対して失礼だよなと改めて思ったり

今日のるびぃ ~ yield と Proc ~

引き続き, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで の読書メモ.

yield

以下のようなメソッドがある.

def greeting
  puts 'Hello'
  puts 'Hello'
end

ブロック付きで呼び出す.

[3] pry(main)> def greeting
[3] pry(main)*   puts 'Hello'
[3] pry(main)*   yield
[3] pry(main)*   puts 'Hello'
[3] pry(main)* end  
=> :greeting
[4] pry(main)> greeting do
[4] pry(main)*   puts 'hoge'
[4] pry(main)* end  
Hello
hoge
Hello
=> nil

ブロックが渡されているかを確認する場合には block_given? を利用する.

[5] pry(main)> def greeting
[5] pry(main)*   puts 'Hello'
[5] pry(main)*   if block_given?
[5] pry(main)*     yield
[5] pry(main)*   end  
[5] pry(main)*   puts 'Hello'
[5] pry(main)* end  
=> :greeting
[6] pry(main)> greeting do
[6] pry(main)*   puts 'hoge'
[6] pry(main)* end  
Hello
hoge
Hello
=> nil
[7] pry(main)> greeting
Hello
Hello
=> nil

yield はブロックに引数を渡したり, ブロックの戻り値を受け取ったり出来る.

[8] pry(main)> def greeting
[8] pry(main)*   yield 'foo'  
[8] pry(main)* end  
=> :greeting
[9] pry(main)> greeting do |text|
[9] pry(main)*   puts text  
[9] pry(main)* end  
foo
=> nil

yield に渡される引数に過不足があっても例外にはならない.

[13] pry(main)> def greeting
[13] pry(main)*   yield 'foo', 'bar'  
[13] pry(main)* end  
=> :greeting
[14] pry(main)> 
[15] pry(main)> greeting do |text|
[15] pry(main)*   puts text  
[15] pry(main)* end  
foo
=> nil
[16] pry(main)> greeting do |t1, t2|
[16] pry(main)*   puts t1
[16] pry(main)*   puts t2
[16] pry(main)* end  
foo
bar
=> nil

ふむふむ.