Variabile Protected


#1

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


#2

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