14

親クラスのクラスメソッドを介して子クラスのインスタンスメソッドを動的に作成したい。

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行目に何を書く?

4

2 に答える 2

20

次のように使用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"
于 2012-07-03T15:43:03.530 に答える
11
define_method 'fizz' do
  puts 'fizz'
end

...またはブロックを受け入れる

define_method 'fizz', &block
于 2012-07-03T15:38:51.567 に答える