方法一起我有一個模塊Settings
類似如下:實現「=」用的method_missing
module Settings
extend self
@_settings = {user: "user1"} #@_seetings would normally be filled with different (dynamic) options
attr_reader :_settings
def method_missing(name, *args, &block)
@_settings.has_key?(name.to_sym) ? @_settings[name.to_sym] :
raise(NoMethodError, "unknown configuration root #{name}", caller)
end
end
在我的應用程序可以使用Settings.user
訪問選項user
現在我想這樣做像這樣Settings.user = "some_user"
我試着補充一點:
def method_missing=(name, *args, &block)
#some code to assign the value
end
不幸的是,這是行不通的。 (unknown configuration root user= (NoMethodError)
)。什麼是「正確」的方式來做到這一點?
該應用程序是一個cli工具。 Settings模塊分析命令行選項並將它們提供給應用程序。它不被繼承或包含在其他類/模塊中。這只是必需的。 –
我認爲你使用的模塊方法增加了*方法*比所需的更復雜。您可能可以爲此使用「OpenStruct」。在http://ruby-doc.org/stdlib-2.0.0/libdoc/ostruct/rdoc/OpenStruct.html查看。我一直使用這個命令行選項。 –