2005-01-22
Ruby, ブロック引数をとるメソッド
- Reference URI
- http://lowreal.net/logs/2005/01/22/2
- Written Time
- 2005-01-22T12:13:19+09:00
- Tags
-
- ruby
- prog
def foo(a, b)
yield a + b
end
def fop(a, b, &block)
yield a + b
end
def foq(a, b, &block)
block.call a + b
end
引数に &block を書かないとブロックをとるメソッドなのか取らないメソッドなのかわかりにくい。でもなんか &block を書くとダサい。
二番目の方法だと block という引数を使ってなくてキモい。三番目の方法は一般的なコードじゃなくてキモい。
さて、ホントは上のコードの block.call は block.yield (引数のチェックをしない) になるんだろうけど、NoMethodError がでる。なんでだろ。
$ ruby -v -e 'Proc.new {|t| puts t}.yield("foo")'
ruby 1.8.1 (2003-12-25) [i386-cygwin]
-e:1: undefined method 'yield' for #<Proc:0x100e6dd8@-e:1> (NoMethodError)
exit 1
Trackback URI: http://lowreal.net/logs/2005/01/22/2.trackback
NULL
Generated with Taglibro
この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。
Comments (0)