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.
Ea0f49852120659a4b769dbc7c6e9c56?d=identicon&s=25 Federico Granata (Guest)
on 2006-05-03 18: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" ???
A55606528cd0c6f4f976a58827b6e5d1?d=identicon&s=25 Alfonso Martone (Guest)
on 2006-05-03 18: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
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18: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 Granata <federico.granata@gmail.com> wrote:
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
A55606528cd0c6f4f976a58827b6e5d1?d=identicon&s=25 Alfonso Martone (Guest)
on 2006-05-03 18: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
Ml@lists.ruby-it.org
http://lists.ruby-it.org/mailman/listinfo/ml
Ea0f49852120659a4b769dbc7c6e9c56?d=identicon&s=25 Federico Granata (Guest)
on 2006-05-03 18: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
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18: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 Martone <a.martone@retepnet.it> wrote:
>
>
> alf_______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
A55606528cd0c6f4f976a58827b6e5d1?d=identicon&s=25 Alfonso Martone (Guest)
on 2006-05-03 18: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
Ea0f49852120659a4b769dbc7c6e9c56?d=identicon&s=25 Federico Granata (Guest)
on 2006-05-03 18: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
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18: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 Martone <a.martone@retepnet.it> wrote:
> L'eval interno alle stringhe ("... #{espressione} ...") è un vero
> ~ irb
> irb(main):004:0> x
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
Ea0f49852120659a4b769dbc7c6e9c56?d=identicon&s=25 Federico Granata (Guest)
on 2006-05-03 18:59
(Received via mailing list)
Io uso la 1.8.4 sotto linux e (una volta 'apicettato') mi funziona
correttamente.
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18: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 Granata <federico.granata@gmail.com> wrote:
> >
> > >
> > > giocano anzitutto sulle "eval": cfr. l'esempio del "sito-calcolatore"
> > > => " \"stringa complicata\"  "
> > >
> >
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
A55606528cd0c6f4f976a58827b6e5d1?d=identicon&s=25 Alfonso Martone (Guest)
on 2006-05-03 18: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
Ea0f49852120659a4b769dbc7c6e9c56?d=identicon&s=25 Federico Granata (Guest)
on 2006-05-03 18: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)
Bae4c0e2bac1ffc96ae6d48d80faef44?d=identicon&s=25 Pilu (Guest)
on 2006-05-03 18:59
(Received via mailing list)
On 5/2/06, chiaro scuro <kiaroskuro@gmail.com> wrote:
> ##############################
>
> vi funziona?

Io uso ruby 1.8.4 su ubuntu e funziona
Ea0f49852120659a4b769dbc7c6e9c56?d=identicon&s=25 Federico Granata (Guest)
on 2006-05-03 18:59
(Received via mailing list)
On 5/2/06, Pilu <franz.andrea@gmail.com> wrote:
> Io uso ruby 1.8.4 su ubuntu e funziona
ma in irb o mettendolo in un file ?
5a71a9178d33e0d63db4f1bb81a917c4?d=identicon&s=25 Stefano Z. (Guest)
on 2006-05-03 18: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
Bae4c0e2bac1ffc96ae6d48d80faef44?d=identicon&s=25 Pilu (Guest)
on 2006-05-03 18:59
(Received via mailing list)
On 5/2/06, Federico Granata <federico.granata@gmail.com> 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
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18: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 <franz.andrea@gmail.com> wrote:
> >
>
--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
A55606528cd0c6f4f976a58827b6e5d1?d=identicon&s=25 Alfonso Martone (Guest)
on 2006-05-03 18: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
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18:59
(Received via mailing list)
On 5/2/06, Alfonso Martone <a.martone@retepnet.it> 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"
Bae4c0e2bac1ffc96ae6d48d80faef44?d=identicon&s=25 Pilu (Guest)
on 2006-05-03 18: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
A55606528cd0c6f4f976a58827b6e5d1?d=identicon&s=25 Alfonso Martone (Guest)
on 2006-05-03 18: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
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18:59
(Received via mailing list)
Direi che e' tutta colpa di Federico che fa domande strane ;-)

On 5/2/06, Alfonso Martone <a.martone@retepnet.it> wrote:
>    eval "puts pippo"  # ok
>    eval("#{my_var_name} = #{my_value_name}")
>
--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
36f352bc8c234dbde21cb30e89767824?d=identicon&s=25 Luigi Panzeri (Guest)
on 2006-05-03 18:59
(Received via mailing list)
"Federico Granata" <federico.granata@gmail.com> 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
Ea0f49852120659a4b769dbc7c6e9c56?d=identicon&s=25 Federico Granata (Guest)
on 2006-05-03 18: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 :-(
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18:59
(Received via mailing list)
prova con il metodo del martellone che ti avevo mandato. a me funziona.

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



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
B1c45f949749d001b4b9a75f50f69d38?d=identicon&s=25 Paolo Donà (Guest)
on 2006-05-03 18: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 <kiaroskuro@gmail.com> wrote:
> > > "Federico Granata" <federico.granata@gmail.com> writes:
> > > > (NameError)
> > >   puts pippo
> > >
> Chiaroscuro
> ---
> Liquid Development: http://liquiddevelopment.blogspot.com/
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Paolo Donà
email me: paolo[dot]dona[at]gmail[dot]com
skype me: paolo[dot]dona
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 18:59
(Received via mailing list)
provato, non funzia.

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



--
Chiaroscuro
---
Liquid Development: http://liquiddevelopment.blogspot.com/
30cb10b258fc90a05e97d63380133bf0?d=identicon&s=25 Massimiliano Mirra (Guest)
on 2006-05-03 19: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
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2006-05-03 19:05
(Received via mailing list)
On 5/2/06, Massimiliano Mirra <i81rnqg02@sneakemail.com> 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 :-)
A55606528cd0c6f4f976a58827b6e5d1?d=identicon&s=25 Alfonso Martone (Guest)
on 2006-05-03 19: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.