2015-11-04 36 views
1

我知道一个方法可以如何在Ruby中给定的类动态创建一个方法?

class Klass 
    define_method foo 

创建如何创建一个方法,并通过班级为PARAM?

def define_method_for klass, method 

红宝石2.2

编辑:用例:

我写一个嘲讽库。所以,我想嘲笑任意的类和方法。

+0

你为什么要这么做? –

+0

'define_method_for'的第二个参数'方法'的期望类型是什么? '方法','符号'或'字符串'? – Aetherus

+0

@Aetherus - 一个符号。什么是“方法”? –

回答

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

你可以这样定义它:

dynamic_name = "ClassName" 
    class = Object.const_set(dynamic_name, Class.new) 
    class.send(:define_method, 'method'){puts 'a'} 

包裹成的方法很简单。

1

要么是:

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

或:

klass.instance_eval{define_method(:foo){...}} 
相关问题