Accedere alle variabili di classe base


#1

Salve,
se ho una classe B che è ereditata da una classe E,supponiamo che @v è
una variabile di classe della classe B,se voglio accedere ad essa dalla
classe E come devo fare?devo usare self.v?

Grazie


#2

Alessandro M. wrote:

Salve,
se ho una classe B che è ereditata da una classe E,supponiamo che @v è
una variabile di classe della classe B,se voglio accedere ad essa dalla
classe E come devo fare?devo usare self.v?

Grazie

A dire il vero non lo so, ma provare non è difficile:

$ vi x

class B
attr_accessor :v
def initialize
@v = 0
end
end

class E < B
def v
self.v
end
end

e = E.new
puts e.v

$ ruby x
x:7:in v': stack level too deep (SystemStackError) from x:7:inv’
from x:12

Quindi la risposta è no. self.v richiama ricorsivamente sè stesso.

Però cercando “ruby call base class” su Google il primo link ritornato
dà la soluzione, che è:

class E < B
def v
super
end
end

Paolo


#3

Il 25 marzo 2009 18.04, Alessandro M. removed_email_address@domain.invalid ha
scritto:

Salve,
se ho una classe B che è ereditata da una classe E,supponiamo che @v è
una variabile di classe della classe B,se voglio accedere ad essa dalla
classe E come devo fare?devo usare self.v?

scusami, parliamo di variabili di classe o di istanza? @v è una
instance variable, a differenza di @@v che è una class variable.


#4

Pietro G. wrote:

Il 25 marzo 2009 18.04, Alessandro M. removed_email_address@domain.invalid ha
scritto:

Salve,
se ho una classe B che � ereditata da una classe E,supponiamo che @v �
una variabile di classe della classe B,se voglio accedere ad essa dalla
classe E come devo fare?devo usare self.v?

scusami, parliamo di variabili di classe o di istanza? @v � una
instance variable, a differenza di @@v che � una class variable.

Hai ragione, non mi ero accorto dell’ambiguità nella domanda. La
soluzione però è la stessa:

class B
@@v = 0
def v
@@v
end
end

class E < B
def v
super
end
end

e = E.new
puts e.v

Paolo