Я пытаюсь научиться создавать многоклассовую программу на ruby. Я закодировал класс Engine и некоторые другие классы, такие как город, улица и т. д., и у меня возникли проблемы с передачей имени класса в качестве переменной другим классам. Приведенный ниже код выдает ошибку: «City.rb:15:in 'intro': неопределенная локальная переменная или метод игры для # (NameError)". Я в некотором роде понимаю проблему, но я не думаю, что этому городу нужно что-то знать о игровой объект, я думаю, он должен только получить его и передать обратно. Но, похоже, у меня есть непонимание того, как передавать переменные (особенно имя класса) между классами. Что не так в моем дизайне?
#Game.rb
require './City.rb'
class Engine
def initialize(city_name, street_name, budget)
@city = City.new(city_name)
@city.read_name()
play(@city, :intro, self)
end
def play(place, next_step, engine)
while true
next_step = place.method(next_step).call(place, next_step, engine)
end
end
end
game = Engine.new("Casablanca", "Costanza Boulvard", 200)
#City.rb
class City
def initialize(city_name)
@city_name = city_name
end
def read_name()
puts <<-READ_NAME
You are in a city called "#{@city_name}".
READ_NAME
end
def intro(place, next_step, engine)
puts "...."
game.play(@street, :enter, engine)
end
end