Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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中配置对象的共享实例_Ruby - Fatal编程技术网

Ruby中配置对象的共享实例

Ruby中配置对象的共享实例,ruby,Ruby,问题 我正在开发一个简单的Ruby CLI,它需要将其配置信息存储在一个平面文件中。我有一个Configurator类,负责所有数据管理、保存到文件系统等 尽管随意实例化Configurator对象是完全合法的,但我还想提供一个共享实例(这样它在CLI中随处可用)。在Ruby中,似乎有很多关于如何正确实现这一点的观点,而我也深信不疑( 我的第一次尝试 配置器.rb 配置.rb 知道了这一点,我的配置模块可以这样使用: include Configuration # Initialize our

问题

我正在开发一个简单的Ruby CLI,它需要将其配置信息存储在一个平面文件中。我有一个
Configurator
类,负责所有数据管理、保存到文件系统等

尽管随意实例化
Configurator
对象是完全合法的,但我还想提供一个共享实例(这样它在CLI中随处可用)。在Ruby中,似乎有很多关于如何正确实现这一点的观点,而我也深信不疑(

我的第一次尝试

配置器.rb

配置.rb

知道了这一点,我的
配置
模块可以这样使用:

include Configuration

# Initialize our shared Configurator.
Configuration.load_configuration('~/.app_config')

# Use it.
p configuration
# => #<Configurator:0x0000010126f8e8 @config_path="/Users/abach/.app_config">
包含配置
#初始化我们的共享配置程序。
配置。加载配置(“~/.app\u config”)
#使用它。
p构型
# => #
我已经证实了这一点,但有几种异味:

  • 运行
    Configuration.load\u Configuration
    感觉很奇怪;不知道该怎么说。但这很可能是我的问题。:)
  • 在模块中使用类变量似乎也不正确
  • 想法?


    谢谢你的帮助

    您编写配置管理是为了学习如何做这样的事情,还是只是想解决一个问题(Ruby CLI需要将其配置信息存储在平面文件中)


    在后一种情况下,请特别注意。

    虽然很有趣,但配置库并不适合我的需要(例如,它将数据存储在Ruby中,而我的数据需要能够被非Ruby环境访问)。
    module Configuration
      @@configuration = nil
    
      def configuration
        if @@configuration
          @@configuration
        else
          fail 'Attempted to access `configuration` before ' \
          'executing `load_configuration`'
        end
    
        def load_configuration(path)
          @@configuration = Configurator.new(path)
        end
    end
    
    include Configuration
    
    # Initialize our shared Configurator.
    Configuration.load_configuration('~/.app_config')
    
    # Use it.
    p configuration
    # => #<Configurator:0x0000010126f8e8 @config_path="/Users/abach/.app_config">