親クラスのクラスメソッドを介して子クラスのインスタンスメソッドを動的に作成したい。
class Foo
def self.add_fizz_method &body
# ??? (This is line 3)
end
end
class Bar < Foo
end
Bar.new.fizz #=> nil
class Bar
add_fizz_method do
p "i like turtles"
end
end
Bar.new.fizz #=> "i like turtles"
3行目に何を書くか?
使用する define_method
このような:
class Foo
def self.add_fizz_method &block
define_method 'fizz', &block
end
end
class Bar < Foo; end
begin
Bar.new.fizz
rescue NoMethodError
puts 'method undefined'
end
Bar.add_fizz_method do
p 'i like turtles'
end
Bar.new.fizz
出力:
method undefined
"i like turtles"
define_method 'fizz' do
puts 'fizz'
end
...またはブロックを受け入れる
define_method 'fizz', &block