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?)

Grazie mille

From: Alessandro M. [email protected]
To: [email protected]
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 :slight_smile:
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