Forum: Italian Ruby user group Variabili "variabili"

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Federico G. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
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" ???
Alfonso M. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
> 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
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
è 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. <removed_email_address@domain.invalid> wrote:
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Alfonso M. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
> è 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
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml
Federico G. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
Direi che la eval va benissimo per quello che devo fare, purtroppo ne
ignorvo l'esistenza... è ora che mi procuri un ottimo manuale ruby ;-)

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
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
il tuo esempio a me non funziona. è come se uscito dallo scope della eval
la
variabile andasse persa.

On 5/2/06, Alfonso M. <removed_email_address@domain.invalid> wrote:
>
>
> alf_______________________________________________
> Ml mailing list
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Alfonso M. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
> 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" :-)
(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
Federico G. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
ovviamente avevi ragione, mi ero dimenticato di 'apiciare' ;-)

Mi sto divertendo come un pazzo adesso che ho conosciuto la eval :-D
grazie mille
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
è 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. <removed_email_address@domain.invalid> wrote:
> L'eval interno alle stringhe ("... #{espressione} ...") è un vero
> ~ irb
> irb(main):004:0> x
> _______________________________________________
> Ml mailing list
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Federico G. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
Io uso la 1.8.4 sotto linux e (una volta 'apicettato') mi funziona
correttamente.
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
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. <removed_email_address@domain.invalid> wrote:
> >
> > >
> > > giocano anzitutto sulle "eval": cfr. l'esempio del "sito-calcolatore"
> > > => " \"stringa complicata\"  "
> > >
> >
> _______________________________________________
> Ml mailing list
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Alfonso M. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
> ##############################
> 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
Federico G. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
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 :-D ) 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)
Pilu (Guest)
on 2006-05-03 20:59
(Received via mailing list)
On 5/2/06, chiaro scuro <removed_email_address@domain.invalid> wrote:
> ##############################
>
> vi funziona?

Io uso ruby 1.8.4 su ubuntu e funziona
Federico G. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
On 5/2/06, Pilu <removed_email_address@domain.invalid> wrote:
> Io uso ruby 1.8.4 su ubuntu e funziona
ma in irb o mettendolo in un file ?
Stefano Z. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
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
Pilu (Guest)
on 2006-05-03 20:59
(Received via mailing list)
On 5/2/06, Federico G. <removed_email_address@domain.invalid> 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 :-D ) 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
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
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 <removed_email_address@domain.invalid> wrote:
> >
>
--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Alfonso M. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
> 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 :-D ) in un file eval.rb e provo a eseguirlo con ruby
> eval.rb ottengo anche io l'errore

Urka, è vero :-(
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
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
On 5/2/06, Alfonso M. <removed_email_address@domain.invalid> 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"
Pilu (Guest)
on 2006-05-03 20:59
(Received via mailing list)
> 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.

A questo punto forse conviene fare:

my_var_name = "pippo"
my_value_name = '"abcd"'
eval "def #{my_var_name}; #{my_value_name}; end"
puts pippo
Alfonso M. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
> dove cavolo mi mantiene quel contesto?!


C'è anche self.instance_eval che funziona:

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

   eval "puts pippo"  # ok
   self.instance_eval "puts pippo" # ok
   puts pippo  # errore in ruby ma non in irb !!!


Comunque c'è davvero qualcosa che non quadra; altro esempio:

   my_var_name = "pippo"
   my_value_name = '"abcd"'

   Object.module_eval "attr_accessor :#{my_var_name}"
   eval("#{my_var_name} = #{my_value_name}")

   puts pippo         # ruby restituisce "nil" !!!
   eval "puts pippo"  # ruby restituisc2 pippo !!!

alf
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
Direi che e' tutta colpa di Federico che fa domande strane ;-)

On 5/2/06, Alfonso M. <removed_email_address@domain.invalid> wrote:
>    eval "puts pippo"  # ok
>    eval("#{my_var_name} = #{my_value_name}")
>
--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Luigi P. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
"Federico G." <removed_email_address@domain.invalid> writes:

> 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 :-D ) 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)
>

Si infatti. Cerca su http://www.rubycentral.com/book/irb.html alla
voce "Restrictions". Puoi replicare l'errore su irb con

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

  puts pippo
end

Ciao
Federico G. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
Ok, adesso abbiamo capito come replicare l'errore in irb ma non ho
capito come posso ottenere la variabile pippo in uno script ruby senza
ottenre un bell'errore :-(
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
prova con il metodo del martellone che ti avevo mandato. a me funziona.

On 5/2/06, Federico G. <removed_email_address@domain.invalid> wrote:
> > > ma se metto le stesse istruzioni (copia & incolla, sbaglio una volta e
> >   my_var_name = "pippo"
> > Ml mailing list
> > removed_email_address@domain.invalid
> > http://lists.ruby-it.org/mailman/listinfo/ml
> >
> >
> >
> _______________________________________________
> Ml mailing list
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Paolo Donà (Guest)
on 2006-05-03 20:59
(Received via mailing list)
non ho seguito bene il thread, ma so che eval può prendere come secondo
parametro anche un oggetto Binding... magari vi viene qualche idea
usando
quello..

On 5/2/06, chiaro scuro <removed_email_address@domain.invalid> wrote:
> > > "Federico G." <removed_email_address@domain.invalid> writes:
> > > > (NameError)
> > >   puts pippo
> > >
> Chiaroscuro
> ---
> Liquid Development: http://liquiddevelopment.blogspot.com/
> _______________________________________________
> Ml mailing list
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Paolo Donà
email me: paolo[dot]dona[at]gmail[dot]com
skype me: paolo[dot]dona
Chiaro S. (Guest)
on 2006-05-03 20:59
(Received via mailing list)
provato, non funzia.

On 5/2/06, Paolo Donà <removed_email_address@domain.invalid> wrote:
> > >
> > > > > ma se metto le stesse istruzioni (copia & incolla, sbaglio una
> > > > voce "Restrictions". Puoi replicare l'errore su irb con
> > > >
> > > removed_email_address@domain.invalid
> > Ml mailing list
> Ml mailing list
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Massimiliano M. (Guest)
on 2006-05-03 21:00
(Received via mailing list)
> Dunque è vero che la variabile pippo nasce e muore all'interno del
> contesto della eval.

Ipse dixit:

http://groups.google.com/group/comp.lang.ruby/msg/...

--
Ever wondered who's on the other side of the screen?
                                    http://buzz.sameplace.cc
Do flatlanders dream of n-dimensional shapes?
                                    http://blog.hyperstruct.net
Chiaro S. (Guest)
on 2006-05-03 21:05
(Received via mailing list)
On 5/2/06, Massimiliano M. <removed_email_address@domain.invalid> wrote:
>
> > Dunque è vero che la variabile pippo nasce e muore all'interno del
> > contesto della eval.
>
> Ipse dixit:
>
> http://groups.google.com/group/comp.lang.ruby/msg/...


Beh, questa è una risposta ammazza thread :-)
Alfonso M. (Guest)
on 2006-05-03 21:06
(Received via mailing list)
>> Ipse dixit:
>> http://groups.google.com/group/comp.lang.ruby/msg/...
>
> Beh, questa è una risposta ammazza thread :-)

L'ammazzathread era un pochino più avanti:

You don't have to agree here. Each language designer have different
point of view. I'm not going to change my mind by your "should".

Ciò però ci costringe o alle martellate, o ad usare variabili "non
locali" ($pippo)

alf
This topic is locked and can not be replied to.