0
假设我有两个散列设置。 'defaults'散列在启动时被初始化,'settings'散列在数据库中被保留。并非所有的设置都有默认设置,并且并非所有的设置都被保留在第一次启动时,意味着这些散列可能有不同的键。我需要制作3散列“all_settings”,这将有这两个的所有键值,设置键值覆盖默认的,如果两者都存在:使用逻辑谓词从两个不同大小的散列做散列
all_settings[key] = settings[key] || defaults[key]
我已经成功做到这一点的
all_settings = {}
defaults.each{|name, value| all_settings[name] = settings[name] || defaults[name]}
settings.each{|name, value| all_settings[name] = settings[name] || defaults[name]}
但我觉得它有点笨。有没有办法使用更短和更精确的语法来做同样的事情?
@Zach有你的问题的答案,其中'设置'确定两个哈希共享密钥时的值。更一般地说(但不是为了你的问题),'merge'可以采取'h1.merge(h2){| k,v1,v2 | ''。如果'h1'和'h2'都有键'k','v1 = h1 [k]'和'v2 = h2 [k]',块返回的值将成为键'k'的值在合并散列。 –