Sto cercando un modo elegante per assegnare il valore memorizzato all'interno di un hash in un oggetto preesistente. Giusto per essere chiari, se ho un oggetto, ad esempio obj con due attributi, dire il nome e l'età, voglio assegnare questi valori provenienti da un hash, senza fare qualcosa di simile:Modo DRY per assegnare i valori hash a un oggetto
obj.name = hash[:name]
obj.age = hash[:age]
Grazie per l'attenzione. Simone
Potresti spiegarmi perché devi wirte m = "# {chiave} =" insted di m = "# {chiave}"? –
Beh, è difficile da spiegare ma in realtà molto semplice. Per prima cosa diciamo allo scopo di spiegare che 'key' è la stringa' x' e 'hash [chiave]' è '1' ... Ora, in Ruby il codice' obj.x = 1' è in realtà equivalente a ' obj.x = (1) '. Quindi nella riga successiva quando sto facendo 'obj.send (m, ...)', ho bisogno di _assign_ su quella proprietà. In altre parole, se non avessi messo il segno di uguale nel nome del metodo, avrebbe chiamato 'obj.x (1)' e 'x' semplicemente non accetta un parametro (perché è una proprietà). Quello che voglio è 'obj.x = (1)' ed è per questo che ho bisogno di '# {chiave} =' – rfunduk
Puoi anche fare: 'hash.each do | chiave, valore |' quindi usa 'valore' invece di' hash [tasto] '. – PhilT