我知道一个方法可以如何在Ruby中给定的类动态创建一个方法?
class Klass
define_method foo
创建如何创建一个方法,并通过班级为PARAM?
def define_method_for klass, method
红宝石2.2
编辑:用例:
我写一个嘲讽库。所以,我想嘲笑任意的类和方法。
我知道一个方法可以如何在Ruby中给定的类动态创建一个方法?
class Klass
define_method foo
创建如何创建一个方法,并通过班级为PARAM?
def define_method_for klass, method
红宝石2.2
编辑:用例:
我写一个嘲讽库。所以,我想嘲笑任意的类和方法。
我认为这是你在找什么:
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!
你可以这样定义它:
dynamic_name = "ClassName"
class = Object.const_set(dynamic_name, Class.new)
class.send(:define_method, 'method'){puts 'a'}
包裹成的方法很简单。
要么是:
klass.class_eval{define_method(:foo){...}}
或:
klass.instance_eval{define_method(:foo){...}}
你为什么要这么做? –
'define_method_for'的第二个参数'方法'的期望类型是什么? '方法','符号'或'字符串'? – Aetherus
@Aetherus - 一个符号。什么是“方法”? –