Haftungsausschluss: Der Code stammt aus der Rubinkoans
Dies stammt aus einer Diskussion über das Scoping von Konstanten innerhalb von Klassen. Hier ist die Definition einiger weniger Klassen:
class Animal
LEGS = 4
def legs_in_animal
LEGS
end
end
class MyAnimals
LEGS = 2
class Bird < Animal
def legs_in_bird
LEGS
end
end
end
Zu diesem Zeitpunkt tun MyAnimals::Bird.new.legs_in_bird
ergibt 2 und ich verstehe, warum - suchen Sie im lexikalischen Raum nach der Konstante vor der Vererbungshierarchie.
Dann wird diese Klasse definiert:
class MyAnimals::Oyster < Animal
def legs_in_oyster
LEGS
end
end
Das Tutorial sagt, dass nun der Aufruf von MyAnimals::Oyster.new.legs_in_oyster
Ergebnisse in 4 und ich kann es nicht herausfinden. Es scheint mir, dass Oyster eine verschachtelte Klasse in MyAnimals ist und als solche habe ich erwartet, dass sie sich genauso verhält wie die Klasse Birds oben. Mir fehlen einige wichtige Informationen darüber, was die Deklaration der Klasse Oyster mit explizitem Scoping bedeutet.
Kann mir das jemand erklären? Ich habe Hunderte von Ruby-Klasse-Tutorials über Google gefunden, aber keiner von ihnen Adresse diese Situation.
Ich danke Ihnen im Voraus...
3 Stimmen
<picard>Da. Sind. VIER. Beine!!!</picard>
1 Stimmen
<Tierfarm>Vier Beine gut, zwei Beine schlecht</animal farm>
4 Stimmen
Schreibt jemand Code, der davon abhängt, welche Konstante zuerst erreicht wird?
1 Stimmen
Einverstanden @AndrewGrimm. Genauso wie jeder Klammern in komplexe Ausdrücke setzt, um die Dinge klarer zu machen, anstatt sie auswendig zu lernen diese Art von Tisch lautet die richtige Antwort hier "Schaffen Sie keine Situation, in der Sie wissen müssen, ob der Wert aus dem Scoping oder aus der Vererbung stammt."
1 Stimmen
Richtig, aber ich bin damals die Koans durchgegangen und es war ein Teil davon, nicht etwas, was ich in der realen Welt tun wollte :)