我想用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