# Variabili dinamiche

**URL:** <https://www.ruby-forum.com/t/variabili-dinamiche/245036>\
**Category:** IT\
**Created:** [August 23, 2016, 4:19pm UTC](https://www.ruby-forum.com/t/variabili-dinamiche/245036 "2016-08-23T16:19:19Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sadaf\_N](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/858c86/32.png) [@Sadaf\_N](https://www.ruby-forum.com/u/Sadaf_N)\
**Post date:** [August 23, 2016, 4:19pm UTC](https://www.ruby-forum.com/t/variabili-dinamiche/245036/1 "2016-08-23T16:19:19Z")

</div>

Ciao a tutti,

sto processando riga per riga un file CVS.

uno dei campi della riga e’ un identificativo univoco che mi indentifica  
il “proprietario” di quella riga.

a priori non so quanti “proprietari” ci sono nel file .

come posso fare a creare delle nuove variabili in cui registrare dei  
cumulativi in runtime ?

L’idea che mi era venuta era semplicemente di nominare la variabili con  
una concatenazione tra una stringa fissa ed il nome del proprietario ,  
in modo che automaticamente i valori fossero registrati nella casella  
giusta.

in questo modo devo solo tenere traccia in un array di quanti differenti  
proprietari esistono per poi accedere alle variabili direttamente.

Vi sembra una strada fattibile ?

-----------ESEMPIO-----------------------

lara,10,2,11  
marco,20,4,5  
gigi,30,40,20  
lara,20,30,11

cumulativo\_1\_lara=30  
cumulativo\_2\_lara=32  
cumulativo\_3\_lara=22

cumulativo\_1\_marco=20  
etc

* * *

quello che mi interessa e’ sapere se e’ possibile fare delle variabili  
con nomi dinamici in modo che a runtime se nel file c’e’ un nuovo  
“proprieatario” vengano create al volo le variabili giuste

---

<div class="post-metadata">

**Author:** ![ialuronico](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c4cdca/32.png) [@ialuronico](https://www.ruby-forum.com/u/ialuronico)\
**Post date:** [August 25, 2016, 9:21pm UTC](https://www.ruby-forum.com/t/variabili-dinamiche/245036/2 "2016-08-25T21:21:10Z")

</div>

Il modo più semplice è creare un Hash, usare i nomi delle persone come  
chiavi dell’hash e nel valore corrispondente ad ogni persona tieni il  
conto del suo cumulativo.

---

<div class="post-metadata">

**Author:** ![ialuronico](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c4cdca/32.png) [@ialuronico](https://www.ruby-forum.com/u/ialuronico)\
**Post date:** [August 26, 2016, 2:24am UTC](https://www.ruby-forum.com/t/variabili-dinamiche/245036/3 "2016-08-26T02:24:15Z")

</div>

questo pero’ obbliga a fare un sacco di operazioni , tutte le volte che  
leggi un “proprietario” devi controllare in tutto l’ hash se esiste gia’  
, se non esiste devi aggiungerlo, cosa che invece creando al volo le  
variabili con il nome del proprietario non devi fare perche’ se l’hai  
gia’ usata contiene gia’ un valore , se non l’hai mai usata contiene  
zero

---

<div class="post-metadata">

**Author:** ![ialuronico](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/c4cdca/32.png) [@ialuronico](https://www.ruby-forum.com/u/ialuronico)\
**Post date:** [August 27, 2016, 7:07am UTC](https://www.ruby-forum.com/t/variabili-dinamiche/245036/4 "2016-08-27T07:07:15Z")

</div>

Sono poche righe e una sola struttura dati, contro probabilmente poche  
righe e forse centinaia di variabili di cui tra l’altro non conosci a  
priori il nome e quindi poi non sai neppure come ispezionare. Finisce  
che ti serve un hash per tenerne traccia ed iterarvi. È un approccio che  
in trent’anni non ho mai visto usare in linguaggi dinamici. In quelli  
statici ovviamente non ci si pensa neppure.

Sono sicuro però che con la metaprogrammabile di Ruby in qualche modo si  
può costruire il nome di una variabile. Di sicuro si possono creare  
attributi in un oggetto. Se pensi a come si implementano in C un hash,  
la struttura dati di un oggetto e l’elenco delle variabili, vedrai che  
non c’è molta differenza. E Ruby è scritto in C.

Ti invito a provare entrambe le implementazioni e poi giudica ti quale  
sia la più pratica.
