如何在Ruby中参数化一个类

时间:2017-02-10 18:22:42

标签: python ruby

我试图移植此模式以将类从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中执行此操作的正确方法是什么?

1 个答案:

答案 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"