2017-02-24 4 views
-2

Ich bin sehr neu in Ruby und ich versuche zu finden, wenn es eine gleichwertige Möglichkeit gibt, das Ding in Ruby zu tun.Überschreibe einen Hash in Ruby

In yml Syntax verwenden wir eine Syntax ähnlich wie diese Art und Weise einen Standard Blob zu haben und sie dann mit bestimmten Werten außer Kraft setzen:

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} 

Ich wollte wissen, ob wir einen Hash in Ruby schaffen können, wo in Es werden die Werte für die Überschreibung ausgewählt, wenn sie vorhanden sind, andernfalls wird nur der Standardwert ausgewählt.

Ich bin mir nicht sicher, ob Ruby Merge Map ein Ansatz für dieses Problem ist (da ich noch neu in Ruby bin, erkunde ich Optionen).

Ist das möglich?

Antwort

0

merge könnte verwendet werden:

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

wenn Sie Schienen verwenden, die auch eine reverse_merge bietet, die sich um die andere Art und Weise funktioniert und kann klare Absicht lesen von in einigen Anwendungsfällen

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