我有一个定义并返回一个新类的函数,带有一些预构建的方法。 E.g:
def define_class(name, options={}, &block)
klass = Class.new(Class) do
def say_hello
puts "Hello!"
end
def say_goodbye
puts "Adios!"
end
end
parent_class.const_set(form_class, klass)
klass
end
因此,例如,这有效:
define_class("testing").new.say_hello #=> "Hello!"
但我希望能够通过一个块传递自定义方法,然后将其添加到我的类中,如下所示:
define_class "testing" do
# ... custom methods
end
这样可行:
klass = define_class "testing" do
def interject
puts "Excuse me?"
end
end
klass.new.interject #=> "Excuse me?"
我无法弄清楚如何做这项工作;我已经尝试过instance_eval,class_eval和yield,但没有一个产生所需的结果。
答案 0 :(得分:2)
尝试简单:
def define_class(name, options={}, &block)
klass = Class.new(&block)
parent_class.const_set(form_class, klass)
klass
end
如果您想调用块和您自己的块,您应该使用class_eval
:
def define_class(name, options={}, &block)
klass = Class.new do
def say_hello
puts "Hello!"
end
def say_goodbye
puts "Adios!"
end
class_eval(&block)
end
parent_class.const_set(form_class, klass)
klass
end