2017-02-24 85 views
-2

我对ruby非常陌生,我试图找出是否有相当的方法来做这件事的红宝石。覆盖ruby中的散列

在阳明语法,我们使用类似的语法与本办法有一个默认的斑点,然后用特定值覆盖它们:

default: 
    default: 
    A:     {read: 20, write: 10} 
    B:     {read: 30, write: 30} 
    C:     {read: 130, write: 10} 

override1: 
    placeholderA: 
    A:    {read: 10, write: 10} 

override2: 
    placeHolderB: 
    A:   {read: 10, write: 10} 
    B:   {read: 5, write: 5} 
    C:   {read: 5, write: 5} 
    D:   {read: 5, write: 5} 

我想知道,如果我们能够在Ruby中创建一个散列结果,其中在如果它们存在,它会选择覆盖的值,否则它会选择默认值。

我不知道如果红宝石合并地图是一种解决这个问题的方法(因为我还是一个新的红宝石,我正在探索选项)。

这可能吗?

回答

0

合并可用于:

options = {a:22} 
my_defaults = {a:1, b:123} 
my_defaults.merge(options) 
> {a:22, b:123} 

如果您正在使用的轨道,它也提供这一轮工作的其他方式reverse_merge,并且可以更清楚在一些使用情况下读取意图

options = { a:2, b:321 } 
my_defaults = {a:1, c:3} 
options.reverse_merge(my_defaults) 
> {a:2, b:321, c:3} 

http://apidock.com/rails/Hash/reverse_merge