2017-02-24 87 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