我想用Ruby做一些配置文件工作。配置中的一些元素名义上取决于其他元素,但不一定。我可以创建一个透明地显示方法和变量的类吗?
例如,使用配置的时候,我想这样做:
require_relative "config"
require_relative "overrides"
dosomething_with(Config.libpath)
在 “配置”,我想是这样的:
require 'ostruct'
Config = OpenStruct.new
Config.basepath = "/usr"
Config.libpath = lambda {Config.basepath + "/lib"} # this is not quite what I want
在 “覆盖” 后,用户可能会覆盖Config.basepath
,我想让Config.libpath采取自然的值。但用户可能也覆盖Config.libpath
到一些常数。
我希望能够只说Config.libpath
并获得计算值(如果它没有被覆盖)或定义的值(如果有的话)。
这是我会用Ruby做的事吗?这看起来像是我看到OpenStruct工作的一个自然延伸。
'OpenStruct'使用'method_missing'它的魔力,你不妨看看,如果你没有与性能问题 – bjhaid
小心OpenStruct为它会很快消耗内存。我已经亲身体验过,但[请参阅此问题](http://stackoverflow.com/questions/1177594/ruby-struct-vs-openstruct/4137908#4137908) – engineersmnky