ハッシュには、キーが見つからないときに呼び出される特別なプロシージャがあることをご存知ですか?
これはここで非常にうまく使用できます。
require "backports" # Needed in Ruby 1.8.6
SETTINGS = {
"default" => {
"urls" => [],
"process?" => false,
"type" => 'Discussion'
},
"vB4Discussions" => {
"urls" => ["vB4 General Discussions"],
},
"vB4Design".downcase => {
"urls" => ["vB4 Design and Graphics Discussions"],
"type" => 'Design'
}
}
# Use defaults
SETTINGS["vb4design"].default_proc = lambda{|h, k| SETTINGS["default"][k]}
SETTINGS["vB4Discussions"].default_proc = lambda{|h, k| SETTINGS["default"][k]}
# Now the defaults are used if needed:
SETTINGS["vB4Discussions"]["type"] # ==> 'Discussion'
SETTINGS["vB4Discussions"]["process?"] # ==> false
# Defaults can be edited later:
SETTINGS["default"]["process?"] = true
SETTINGS["vB4Discussions"]["process?"] # ==> true
SETTINGS["vb4design"]["process?"] # ==> true
# Specific value can be changed too
SETTINGS["vb4design"]["process?"] = false # ==> true
SETTINGS["vB4Discussions"]["process?"] # ==> true
注:文字列を使用する正当な理由がない限り、キーには記号を使用する必要があります (つまり:vB4Discussions
、"vB4Discussions"
.
は Ruby 1.8.7のHash.default_proc=
新機能なので、使用する必要がありますrequire "backports"
。これを望まない場合は、代わりに次のようにハッシュを作成するときにデフォルトの proc を指定できます。
DEFAULTS = {
"urls" => [],
"process?" => false,
"type" => 'Discussion'
}
SETTINGS = {
"default" => DEFAULTS,
"vB4Discussions" => Hash.new{|h, k| DEFAULTS[k]}.merge!{
"urls" => ["vB4 General Discussions"],
},
"vB4Design".downcase => Hash.new{|h, k| DEFAULTS[k]}.merge!{
"urls" => ["vB4 Design and Graphics Discussions"],
"type" => 'Design'
}
}