define_methodで定義したメソッドへのブロック
って無視されちゃうのかな?
irb(main):001:0> class A irb(main):002:1> define_method('foo') do irb(main):003:2* puts "block_given? ==> #{block_given?.inspect}" irb(main):004:2> # lambda.call irb(main):005:2* # ==> ArgumentError: tried to create Proc object without a block irb(main):006:2* # がraiseされる。Proc.new.call, proc.call でも同じ。 irb(main):007:2* end irb(main):008:1> irb(main):009:1* def bar irb(main):010:2> puts "block_given? ==> #{block_given?.inspect}" irb(main):011:2> end irb(main):012:1> irb(main):013:1* end => nil irb(main):014:0> a1 = A.new => #<A:0x2ecdec8> irb(main):015:0> a1.foo block_given? ==> false => nil irb(main):016:0> a1.foo{"aaa"} block_given? ==> false => nil irb(main):017:0> a1.bar block_given? ==> false => nil irb(main):018:0> a1.bar{"aaa"} block_given? ==> true => nil irb(main):019:0>
http://www.ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%A5%D6%A5%ED%A5%C3%A5%AF%C9%D5%A4%AD%A5%E1%A5%BD%A5%C3%A5%C9%B8%C6%A4%D3%BD%D0%A4%B7
を見て、内部でproc, lambda, Proc.new を使ったらいけるかな?とか思ったけど、これはmodule_evalでやるべきなの?
ちなみに
define_method('foo') do |&proc|
だとsyntax errorになっちゃう。