Ich habe Probleme zu verstehen, diese Codezeilen in der Übung 43 des Buches Lernen Sie Ruby auf die harte Tour. Hoffte, dass jemand es mir erklären würde.Aufruf Methode aus einer anderen Klasse
In der While-Schleife der Methode play(), welche Methode wird ausgeführt, wenn die while-Anweisung wahr ist? Sind next_scene_name und current_scene nur Variablen definiert? Und sie werden durch Ausführen der opening_scene Methode, die eine Methode aus einer anderen Klasse (Klasse Map) ist, Klasse Engine und Klasse Map haben keine Beziehung zueinander (oder?) Wie könnte etwas in der Klasse Engine eine Methode aufrufen in der Klasse Karte?
class Engine
def initialize(scene_map)
@scene_map = scene_map
end
def play()
current_scene = @scene_map.opening_scene()
last_scene = @scene_map.next_scene('finished')
while current_scene != last_scene
next_scene_name = current_scene.enter()
current_scene = @scene_map.next_scene(next_scene_name)
end
# be sure to print out the last scene
current_scene.enter()
end
end
class Map
@@scenes = {
'central_corridor' => CentralCorridor.new(),
'laser_weapon_armory' => LaserWeaponArmory.new(),
'the_bridge' => TheBridge.new(),
'escape_pod' => EscapePod.new(),
'death' => Death.new(),
'finished' => Finished.new(),
}
def initialize(start_scene)
@start_scene = start_scene
end
def next_scene(scene_name)
val = @@scenes[scene_name]
return val
end
def opening_scene()
return next_scene(@start_scene)
end
end
Ihre Annahmen sind alle korrekt. Aber warum sollte eine "Engine" nicht dazu berechtigt sein, eine Methode auf einer "Map" aufzurufen? Die 'scene_map' wurde während der Initialisierung in die 'Engine' übernommen (die Instanz ist der Engine bekannt) und die' opening_scene' und die 'next_scene' Methode sind in der Map Klasse nicht' private'. – spickermann
OK, ich wusste nicht, dass ich eine Methode in einer anderen Klasse aufrufen kann, ich war mir der Funktionen für öffentliche und private Methoden nicht bewusst. Du hast viel für mich getan, danke. – CryptoPsyche