我试图移植此模式以将类从Python参数化为Ruby:https://github.com/prometheus/client_python/blob/6a8d85e5f64935b6c2a409291e9f6578a7bfe1b0/prometheus_client/core.py#L395-L434
outer方法设置一些变量,然后在内部定义一个关闭这些值的类。结果是从这个返回的类创建的所有对象都共享一些公共状态。
我无法在Ruby中执行此操作,因为Ruby不允许在方法中使用类定义:
def foo
class Bar
end
end
这会产生错误:class definition in method body
。
在Ruby中执行此操作的正确方法是什么?
答案 0 :(得分:3)
如果你想在Ruby中动态创建一个类,你可以。你不能在方法中定义一个常量,至少不是以通常的方式。有关详细信息,请参阅those answers。
def create_class(methods = {})
klass = Class.new
methods.each do |method_name, value|
klass.send(:define_method, method_name) do
value
end
end
klass
end
my_class = create_class a: 'Hello', b: 'World'
my_instance = my_class.new
puts my_instance.a
#=> "Hello"
puts my_instance.b
#=> "World"