2013-01-12 16 views
12

Powiedzmy mam zagnieżdżonych hash:Jak ustawić dynamicznie zagnieżdżony w ruby?

h = { 'one' => 
     {'two' => 
      {'three' => 'a'} 
     } 
    } 

mogę zmienić to tak:

h['one']['two']['three'] = 'b' 

Jak mogę zmienić wartość zagnieżdżona ze zmienną jako klucz?

Powiedzmy mam następującą zmienną:

key = "one.two.three" 

do niego dostęp dynamicznie, używam następujące:

key.split('.').inject(h,:[]) 

Ale oczywiście ustawienie go tak nie działa:

key.split('.').inject(h,:[]) = 'b' # fails 

W jaki sposób mogę dynamicznie ustawić wartość zagnieżdżonego skrótu?

Odpowiedz

15

Hash#[]= to pojedyncza metoda. Nie możesz wykonać Hash#[] aż do ostatniego klawisza i wykonać dla niego =. Zamiast tego pomiń ostatni klucz i odtwórz go pojedynczo.

*key, last = key.split(".") 
key.inject(h, :fetch)[last] = "b" 
+0

Rozumiem. Ładne wyjaśnienie. – Markus

Powiązane problemy