我无法理解本书练习43中的这些代码行以艰难的方式学习Ruby 。希望有人能向我解释。
在方法play()的while循环中,如果while语句为true,则执行哪个方法? next_scene_name 和 current_scene 只是定义了变量吗?它们是通过运行 opening_scene 方法来定义的,这是一个来自不同类(类Map)的方法,类Engine和类Map彼此没有关系(是吗?)怎么可能在class Engine在类Map中调用一个方法?
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
答案 0 :(得分:0)
你的问题在同一时间非常复杂和简单。 让我们从:
开始def initialize(scene_map) # seems like `scene_map` is an instance of class Map
@scene_map = scene_map
end
然后我们有一个为给定实例调用公共方法的方法(在@scene_map
):
def play()
current_scene = @scene_map.opening_scene() # here
last_scene = @scene_map.next_scene('finished') # and here
while current_scene != last_scene
next_scene_name = current_scene.enter()
current_scene = @scene_map.next_scene(next_scene_name) #and here
end
# be sure to print out the last scene
current_scene.enter()
end
答案 1 :(得分:0)
有两种方法和变量需要注意。
可以在不声明类实例的情况下调用 类方法。
实例方法只能在类的实例上调用。
示例:
class Car
@@number_of_cars_in_existence = 0
def self.count_all_cars_in_existence
@@number_of_cars_in_existence
end
def paint_red
@color = red
end
end
在这里,任何其他类,例如bureaucrat
类可以使用Car.count_all_cars_in_existence
计算所有存在的汽车,但是,要调用paint_red
方法,他们必须调用方法个人车。
class StackOverflowPerson
def paint_car(car)
car.paint_red
end
end
trajanson = StackOverflowPerson.new
my_car = Car.new
trajanson.paint_car(my_car)