Forum: Italian Ruby user group Accedere alle variabili di classe base

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.
136d8428fd5efba4c0a31e46491c013a?d=identicon&s=25 Alessandro Mazzone (alex89)
on 2009-03-25 18:04
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
7de465f222e6a9c7fe658e370d0bfe05?d=identicon&s=25 Paolo Montrasio (pmontrasio)
on 2009-03-26 10:13
Alessandro Mazzone 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:in `v'
  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
8768bcdbda1adf80e4da6744268868af?d=identicon&s=25 Pietro Giorgianni (giorgian)
on 2009-03-26 10:19
(Received via mailing list)
Il 25 marzo 2009 18.04, Alessandro Mazzone <mlafronte5@hotmail.com> 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.
7de465f222e6a9c7fe658e370d0bfe05?d=identicon&s=25 Paolo Montrasio (pmontrasio)
on 2009-03-26 20:13
Pietro Giorgianni wrote:
> Il 25 marzo 2009 18.04, Alessandro Mazzone <mlafronte5@hotmail.com> 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
This topic is locked and can not be replied to.