Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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
Ruby on rails 使用config(yaml)初始化类,并设置应为单个实例的变量_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 使用config(yaml)初始化类,并设置应为单个实例的变量

Ruby on rails 使用config(yaml)初始化类,并设置应为单个实例的变量,ruby-on-rails,ruby,Ruby On Rails,Ruby,我对如何在初始值设定项中正确设置变量感到困惑,我希望这些变量是类级别的变量,而不是实例 然后我还想创建另一个对象的单个实例(它是一个连接对象,已经内置了连接池,所以我只需要对它进行一次引用)。 我的初始值设定项/初始值设定项/My_class.rb yml = YAML.load_file("#{Rails.root}/config/my_class.yml") MYMODULE::MyClass.init(yml) 这是我的课程.rb: module MYMODULE class My

我对如何在初始值设定项中正确设置变量感到困惑,我希望这些变量是类级别的变量,而不是实例

然后我还想创建另一个对象的单个实例(它是一个连接对象,已经内置了连接池,所以我只需要对它进行一次引用)。

我的初始值设定项/初始值设定项/My_class.rb

yml = YAML.load_file("#{Rails.root}/config/my_class.yml")

MYMODULE::MyClass.init(yml)
这是我的课程.rb:

module MYMODULE
  class MyClass
    def self.init(yml)
      @post_url = yml["defaults"]["post_url"]
    end

    def self.post_url
      @post_url
    end

    # this should be a single instance
    def connection_pool
      # ???
    end
  end
end
  • 这些类级变量,如何从类方法和实例方法访问它们
  • 我得到了wierd行为,我对如何从类方法和实例方法内部引用post_url感到困惑

    我看到了以下方法,但不确定哪一种是正确的:

    self.class.post_url
    MyClass.post_url
    @post_url
    post_url
    self.post_url
    

    self.class.post\u url
    MyClass.post\u url
    将起作用。区别在于它们对子类的工作方式(在前一种情况下,子类将自动使用自己版本的该变量,在后一种情况下,它们将在
    MyClass
    中共享该变量)

    无法从实例直接访问类实例变量:您必须调用一个返回(或设置)它们的类方法。另请参见:
    cattr\u存取器


    也就是说,如果这真的是一个单例,那么在类中配置它的一部分,然后在(单例)实例中引用该信息对我来说似乎有点奇怪。在实例上配置这些东西不是更有意义吗?或者将一个模块作为一个单例使用,而不创建实例?

    请您用一些代码片段解释一下,抱歉,没有得到它。