test.rb
def test1(  &block)
#  puts   block
#  block.call
  yield
end
define_method(:test2) { | &block|
#  puts  block
#  block.call
  yield  #if block_given?
}
test1 {
 puts "test1"
}
test2 {
 puts "test2"
}
用字面量定义正常调用 yield,同样的代码换成 define_method 就报错 而且不同版本报错不一样
ruby27 以上报错 Invalid yield (SyntaxError)
ruby27 以下报错 no block given (yield) (LocalJumpError) 但是 test2 明明传了 block 的