2016-07-26 24 views
-1

Wenn ich ein Ruby-Objekt wie dieses nennenKönnen globale Ruby-Variablen vererbt werden?

def classA 
    @myvar = "A" 
end 

def classB < classA 
    puts @myvar 
end 

In Rubin, ist es möglich und Zugang @myvar drucken?

+2

Es gibt viele Dinge, die falsch sind, das sind keine Klassendefinitionen, die mit – nikkypx

+1

beginnen. Sie rufen hier nichts außer 'puts' an. Es gibt kein Ruby-Objekt außer "A", das Sie in keiner Weise aufrufen. '@ myvar' ist keine globale Variable. 'def' sind keine Klassendefinitionen. Sie können Methoden nicht erben. Bitte lesen Sie ein Ruby-Tutorial (und achten Sie genau auf die Terminologie). – Amadan

+0

Es gibt buchstäblich kein einziges Wort in dieser ganzen Frage, die auch nur entfernt überhaupt Sinn macht. Wie ist diese Frage 12 Stunden alt und noch nicht gelöscht? –

Antwort

0

Zuerst werden Ruby-Klassen mit dem Schlüsselwort class definiert. def ist für Methoden. Rubin-Klassennamen sollten immer mit einem Großbuchstaben beginnen.

@myvar ist keine globale Variable. in Ruby erstellen Sie globale Variablen ein Dollarzeichen mit: $myvar. Das at-Zeichen gibt Ihnen eine Instanzvariable. Instanzvariablen sind für alle Methoden in der Klasse zur Verfügung, in dem sie definiert sind, aber sie müssen durch ein Verfahren initialisiert werden. Wenn Sie eine Variable mögen, die nicht innerhalb einer Methode initialisiert werden muss, können Sie auch eine Klassenvariable verwenden, wie diese @@myar. Es ist nur eine Kopie von @@myvar vorhanden, die von allen Instanzen Ihrer Klasse gemeinsam genutzt wird. Sie wird von untergeordneten Klassen geerbt.

Wenn Sie von außerhalb der Klasse auf die Variable zugreifen möchten, benötigen Sie eine Getter-Methode, mit der Sie auf die Variable zugreifen können. Ein Beispiel dafür ist, wie

folgt
class ClassA 
    @@myvar = "A" 
end 

class ClassB < ClassA 
    def myvar 
    @@myvar 
    end 
end 

b = ClassB.new 
puts b.myvar 
0

Sie eine Klasse wie dieses

class A 

end 

class B 

end 

schreiben Wenn Sie über globale Variablen sprechen, so etwas wie dies würde dies genug

class A 
    $var = 1 
end 

Nun gut $ var ist überall zugänglich. Es reist durch die Wände! So können Sie auch in class B zugreifen.

Verwandte Themen