Variabili "variabili"

Sucsate il gioco di parola ma non saprei come altro definirle (e
quindi non riesco nemmeno a cercare bene su google).

Io avrei necessità di assegnare un valore a una variabile (e fin qui
siamo bravi tutti) solo che il nome di questa variabile è contenuto in
una variabile stringa Es. Var = String.new(“pippo”)
Come posso fare per vaorizzare la variabile “pippo” ???

Io avrei necessità di assegnare un valore a una variabile (e fin qui
siamo bravi tutti) solo che il nome di questa variabile è contenuto in
una variabile stringa Es. Var = String.new(“pippo”)
Come posso fare per vaorizzare la variabile “pippo” ???

Sei sicuro che non ti serviva la eval ?

str = “pippo * 8 / 3”

pippo = 5

totale = eval str

pippo = 33

totale = eval str

alf

è molto picchiato dentto con il martello ma funziona…

my_var_name = “pippo”
my_value_name = ‘“abcd”’

Object.module_eval %{
attr_accessor :#{my_var_name}
}

self.instance_eval “self.#{my_var_name} = #{my_value_name}”

puts pippo

PS: invece di Object si dovrebbe usare la singleton class…

On 5/2/06, Federico G. [email protected] wrote:

[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/

Direi che la eval va benissimo per quello che devo fare, purtroppo ne
ignorvo l’esistenza… è ora che mi procuri un ottimo manuale ruby :wink:

P.S. il tuo esempio
my_var_name = “pippo”
my_value_name = ‘“abcd”’
eval “#{my_var_name} = #{my_value_name}”

da errore, o esiste già una variabile che si chiama abcd o nella eval
devo fare qualcosa di simile: eval “#{my_var_name} =
“#{my_value_name}””
o perlomeno questo è il modo grezzo che ho trovato io per farlo
funzionare…

Grazie mille

il tuo esempio a me non funziona. è come se uscito dallo scope della eval
la
variabile andasse persa.

On 5/2/06, Alfonso M. [email protected] wrote:

alf_______________________________________________
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/

P.S. il tuo esempio
my_var_name = “pippo”
my_value_name = ‘“abcd”’
eval “#{my_var_name} = #{my_value_name}”

Avevi probabilmente dimenticato di ‘apiciare’ gli “apicetti” :slight_smile:
(absit iniuria verbis!)

L’eval interno alle stringhe ("… #{espressione} …") è un vero
spasso.

Io uso il Ruby 1.8.2 fornito di serie col Mac OS X (troppo pigro per
upgradare), senza nessuno dei suoi quattro livelli di protezione (che
giocano anzitutto sulle “eval”: cfr. l’esempio del “sito-calcolatore”
nel pragmatic programmer, e l’utente che fa evalutare rm -rf /* o
qualcosa del genere).

~ irb

irb(main):001:0> x = “turz”
=> “turz”

irb(main):002:0> y = ’ “stringa complicata” ’
=> " “stringa complicata” "

irb(main):003:0> eval " #{x} = #{y} "
=> “stringa complicata”

irb(main):004:0> x
=> “turz”

irb(main):005:0> turz
=> “stringa complicata”

alf

è molto picchiato dentto con il martello ma funziona…

Che differenza c’è tra il tuo esempio e questo “senza martello”?

 my_var_name = "pippo"
 my_value_name = '"abcd"'
 eval "#{my_var_name} = #{my_value_name}"

Da parte mia vado matto per la eval:

 a = "def turz ; $$*10 ; end"
 eval a
 puts turz

E ora pure del codice automodificante:

 #!/usr/bin/env ruby

 s="aaa"

 x=open(__FILE__).readlines
 x[2] = "s=#{s.next.inspect}\n"

 open(__FILE__, "w").print(x)
 puts s

alf_______________________________________________
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml

è strano. io gli apicetti li avevo ma continua a non andare

sample.rb:15: undefined local variable or method `pippo’ for
main:Object
(NameError)

sono dovuto ricorrere all’eval cor martello che hai visto prima.

uso 1.8.4

On 5/2/06, Alfonso M. [email protected] wrote:

L’eval interno alle stringhe (“… #{espressione} …”) è un vero
~ irb
irb(main):004:0> x


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/

ovviamente avevi ragione, mi ero dimenticato di ‘apiciare’ :wink:

Mi sto divertendo come un pazzo adesso che ho conosciuto la eval :smiley:
grazie mille

Io uso la 1.8.4 sotto linux e (una volta ‘apicettato’) mi funziona
correttamente.

forse sono io accecato, non so.

io lancio letteralmente il seguente:

##############################
my_var_name = “pippo”
my_value_name = ‘“abcd”’
eval “#{my_var_name} = #{my_value_name}”

puts pippo
##############################

vi funziona?

On 5/2/06, Federico G. [email protected] wrote:

giocano anzitutto sulle “eval”: cfr. l’esempio del “sito-calcolatore”
=> " "stringa complicata" "


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/

##############################
my_var_name = “pippo”
my_value_name = ‘“abcd”’
eval “#{my_var_name} = #{my_value_name}”

puts pippo
##############################

Clamorosamente, qui sul Mac (1.8.2 di Natale 2004) funziona (e scrive
abcd).

alf

Sul mio linux mi lascia dubbioso …
se provo istruzione per istruzione in irb mi funziona che è un piacere
ma se metto le stesse istruzioni (copia & incolla, sbaglio una volta e
poi imparo :smiley: ) in un file eval.rb e provo a eseguirlo con ruby
eval.rb ottengo anche io l’errore
eval.rb:5: undefined local variable or method `pippo’ for main:Object
(NameError)

On 5/2/06, Pilu [email protected] wrote:

Io uso ruby 1.8.4 su ubuntu e funziona
ma in irb o mettendolo in un file ?

On 5/2/06, chiaro scuro [email protected] wrote:

##############################

vi funziona?

Io uso ruby 1.8.4 su ubuntu e funziona

On 5/2/06, Federico G. [email protected] wrote:

Sul mio linux mi lascia dubbioso …
se provo istruzione per istruzione in irb mi funziona che è un piacere
ma se metto le stesse istruzioni (copia & incolla, sbaglio una volta e
poi imparo :smiley: ) in un file eval.rb e provo a eseguirlo con ruby
eval.rb ottengo anche io l’errore
eval.rb:5: undefined local variable or method `pippo’ for main:Object
(NameError)

hai ragione…anche da me fa la stessa cosa…funziona solo in irb

il mistero si infittisce. se invece di

puts pippo

metto

eval “puts pippo”

funziona.

dove cavolo mi mantiene quel contesto?!

On 5/2/06, Pilu [email protected] wrote:


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/

se provo istruzione per istruzione in irb mi funziona che è un piacere
ma se metto le stesse istruzioni (copia & incolla, sbaglio una volta e
poi imparo :smiley: ) in un file eval.rb e provo a eseguirlo con ruby
eval.rb ottengo anche io l’errore

Urka, è vero :frowning:
Avevo provato anch’io soltanto con “irb”.

Però se al posto di pippo metto $pippo (globale anziché locale)
funziona anche da ruby anziché irb:

my_var_name = "$pippo"
my_value_name = '"abcd"'
eval "#{my_var_name} = #{my_value_name}"
puts $pippo

Dunque è vero che la variabile pippo nasce e muore all’interno del
contesto della eval.

alf

Pilu wrote:

vi funziona?
Io uso ruby 1.8.4 su ubuntu e funziona

demo.rb:4: undefined local variable or method `pippo’ for main:Object
(NameError)
ruby 1.8.4 (2005-12-24) [i686-linux]

su archlinux

On 5/2/06, Alfonso M. [email protected] wrote:

Dunque è vero che la variabile pippo nasce e muore all’interno del
contesto della eval.

eccetto che non muore!

è un incubo, il ritorno delle variabili viventi!

prova eval “puts pippo”