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

ブロック付きメソッド

Rubyを今日から触りはじめてます。test/unitを見ててat_exitというブロック付きメソッドを見つけたので、動作を確認してみました。

#!/usr/local/bin/ruby
$wasrun = false
def say_hello_once
at_exit {
    puts "hello, world!"
}unless $wasrun
$wasrun = true
end
(1..10).each do|i|
say_hello_once
end

このスクリプトを実行すると"hello, world!\n"だけが表示されます。ここで確認できたことはおそらく、ブロック付きメソッドで"メソッド ブロック unless 変数"としたとき、変数がtrueならブロックが渡され、falseならブロックは渡されないということなんだと思います。
試しにブロック付きメソッドを作ってunless trueをつけてみます。

#!/usr/local/bin/ruby
def foo_bar_baz
  yield "foo"
  yield "bar"
  yield "baz"
end
foo_bar_baz {|item| puts item} unless true

実行するとやっぱり何も起きませんでした。