覆盖ruby中的哈希

时间:2017-02-24 02:07:17

标签: ruby

我对ruby很新,我试图找出在ruby中做同样事情的方法。

在yml语法中,我们使用类似于这种方式的语法来获得默认blob,然后使用特定值覆盖它们:

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中创建一个哈希值,如果它们存在,它将选择覆盖的值,否则它将只选择默认值。

我不确定ruby merge map是否解决了这个问题(因为我还是ruby的新手,我正在探索选项)。

这可能吗?

1 个答案:

答案 0 :(得分:0)

可以使用

合并:

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

如果你使用rails也提供了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