Wenn aus irgendeinem Grund Instanzen der Klasse Upper
Notwendigkeit, einen Zugang zu den Interna von Instanzen der Klasse haben Super
, es bedeutet, dass Sie einen Konstruktionsfehler haben.
module Test
class Super
def initialize(name)
@name = name
end
def name
@name
end
end
end
Nun könnte man die name
mit Test::Super.new("my name").name
erhalten:
Eine Möglichkeit Super
Bedürfnisse über einen Getter die Variable aussetzen würde.
Eine andere Möglichkeit ist Upper
tatsächlich eine Unterklasse von Super
ist:
class Upper < Super
def test
puts @name
end
end
Jetzt wird Test::Upper.new("my name").test
"my name"
drucken, weil Upper
von Super
die Umsetzung ableitet.
Auch könnte man eine Instanzvariable auf der umschließenden Modulebene verwenden:
module Test
def self.name=(name)
@name = name
end
def self.name
@name
end
class Super
def initialize(name)
Test.name = name
end
end
class Upper
def test
puts Test.name
end
end
end
Dies würde drucken:
▶ Test::Super.new("my")
#⇒ #<Test::Super:0x0055dae57fe390>
▶ Test::Upper.new.test
#⇒ "my"
Welche Variable wollen Sie zwischen dem, was Klassen teilen? – sawa
Wenn Sie eine andere "Test :: Super" -Instanz, z. 'a2 = Test :: Super.new ('Mein anderer Name')', was würde 'b.test()' zurückgeben? – Stefan