Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Ruby中参数化类_Python_Ruby - Fatal编程技术网

Python 如何在Ruby中参数化类

Python 如何在Ruby中参数化类,python,ruby,Python,Ruby,我正在尝试移植此模式以将一个类从Python参数化为Ruby: 外部方法设置一些变量,然后在内部定义一个类,该类关闭这些值。结果是,从该返回类创建的所有对象共享一些公共状态 我不能在Ruby中这样做,因为Ruby不允许在方法中定义类: def foo class Bar end end 这将产生错误:方法体中的类定义 在Ruby中这样做的正确方法是什么?如果您想在Ruby中动态创建一个类,您可以。但是,您不能在方法中定义常量,至少不能以通常的方式定义。有关更多信息,请参阅 def cr

我正在尝试移植此模式以将一个类从Python参数化为Ruby:

外部方法设置一些变量,然后在内部定义一个类,该类关闭这些值。结果是,从该返回类创建的所有对象共享一些公共状态

我不能在Ruby中这样做,因为Ruby不允许在方法中定义类:

def foo
  class Bar
  end
end
这将产生错误:
方法体中的类定义


在Ruby中这样做的正确方法是什么?

如果您想在Ruby中动态创建一个类,您可以。但是,您不能在方法中定义常量,至少不能以通常的方式定义。有关更多信息,请参阅

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"

如果您想在Ruby中动态创建一个类,您可以。但是,您不能在方法中定义常量,至少不能以通常的方式定义。有关更多信息,请参阅

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"

“Ruby不允许在方法中定义类”-为什么?完全允许。试图在一个方法中定义一个类会给我以下错误:“方法体中的类定义”。对不起,你读过这个网站的规则吗?请发布您试图运行的代码,发布您收到的错误消息,我将能够显示错误所在。“Ruby不允许在方法中定义类”-为什么?完全允许。试图在一个方法中定义一个类会给我以下错误:“方法体中的类定义”。对不起,你读过这个网站的规则吗?请发布您试图运行的代码,发布您收到的错误消息,我将能够显示错误。谢谢!我希望在Ruby中可能会有一个不那么笨拙的模式来实现同样的效果,但这应该行得通!谢谢我希望在Ruby中可能会有一个不那么笨拙的模式来实现同样的效果,但这应该行得通!