本書の練習問題43のこれらのコード行を理解するのに問題があります難しい方法でRubyを学ぼう。誰かが私にそれを説明することを願っています。別のクラスから呼び出す方法
play()メソッドのwhileループでは、whileステートメントがtrueの場合にどのメソッドが実行されていますか? Are next_scene_nameとcurrent_sceneただ変数が定義されていますか?そして、別のクラス(クラスマップ)のメソッドであるopening_sceneメソッドを実行することで定義されています。クラスエンジンとクラスマップは互いに関係がありません。クラスマップで?
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
あなたの前提はすべて正しいです。しかし、なぜ 'エンジン'が 'Map'のメソッドを呼び出せないようにするべきだと思いますか? 'scene_map'は初期化中に' Engine'に渡されました(別名インスタンスはエンジンに知られています)、 'opening_scene'と' next_scene'メソッドはMapクラスの 'private'ではありません。 – spickermann
OK、私は別のクラスのメソッドを呼び出すことができませんでした、私はパブリックメソッドとプライベートメソッドの機能を認識していませんでした。あなたは私のために多くをクリアしました、ありがとう。 – CryptoPsyche