如何在Ruby中的给定类上动态创建方法?

时间:2015-11-04 00:28:25

标签: ruby metaprogramming

我知道可以用

创建一个方法
class Klass
  define_method foo

如何创建方法并将类作为参数传递?

def define_method_for klass, method

Ruby 2.2

编辑:使用案例:

我正在写一个模拟库。所以,我想模拟任意类和方法。

3 个答案:

答案 0 :(得分:3)

我认为这就是你要找的东西:

def define_method_for( klass, method, my_proc )
  klass.send( :define_method, method, my_proc )
end

以下是您将如何使用它:

class Klass
end

my_proc = proc { puts 'foo method called!' }
define_method_for( Klass, :foo, my_proc )

Klass.new.foo
#=> foo method called!

你也可以这样定义:

 def define_method_for( klass, method, &block )
   klass.send( :define_method, method, &block )
 end

并像这样使用它:

 class Klass
 end

 define_method_for( Klass, :foo ) do
   puts 'foo method called!'
 end

 Klass.new.foo
 #=> foo method called!

答案 1 :(得分:1)

您可以这样定义:

const char *

包装到方法中很简单。

答案 2 :(得分:1)

要么:

klass.class_eval{define_method(:foo){...}}

或:

klass.instance_eval{define_method(:foo){...}}