Forum: Italian Ruby user group Variabile Protected

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.
Alessandro M. (Guest)
on 2009-03-14 20:04
E' possibile definire Protected una variabile di una classe in Ruby?(A
tal proposito qualcuno potrebbe spiegarmi la differenza tra variabile di
classe e d'istanza?)

Grazie mille
gabriele renzi (Guest)
on 2009-03-16 18:22
(Received via mailing list)
> From: Alessandro M. <removed_email_address@domain.invalid>
> To: removed_email_address@domain.invalid
> Sent: Saturday, 14 March, 2009 19:04:34
> Subject: [ruby-it] Variabile Protected
>
> E' possibile definire Protected una variabile di una classe in Ruby?(A
> tal proposito qualcuno potrebbe spiegarmi la differenza tra variabile di
> classe e d'istanza?)

no, le variabili sono sempre private, però puoi definire come protected i
metodi per accedervi.
In generale comunque non è una pratica comune.

La differenza tra variabile d'istanza e di classe è che le prime sono
visibili solo, beh, nell'istanza :)
Le variabili di classe invece sono visibili sia nella classe che nelle
istanze:
>> class C
>>  @@foo=10
>>  def f() @@foo end
>> end
=> nil
>> C.new.f
=> 10
>> C.class_variables
=> ["@@foo"]

In pratica, una class variable ha senso quando vuoi delle informazioni
che siano condivise tra le varie istanze della classe, *vagamente* come
una static in Java.
Ma se possibile è sempre meglio usare una costante, che è ugualmente
visibile sia nella classe che nell'istanza.

>> class D
>>  Foo=10
>>  def f() Foo end
>> end
=> nil
>> D.new.f
=> 10

Attenzione che siccome le classi sono a loro volta istanze della
(meta-)classe Class, anche loro possono avere variabili d'istanza che
però a quel punto sono del tutto private e invisibili alle sucessive
istanze
This topic is locked and can not be replied to.