ブロック付きメソッド
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
実行するとやっぱり何も起きませんでした。