Estoy tratando de aprender a crear un programa de clases múltiples en ruby. Codifiqué una clase Engine y algunas otras clases como city, street, etc. y tengo problemas para pasar el nombre de la clase como variable a otras clases. El código siguiente arroja el error: "City.rb: 15: in 'intro': variable local indefinida o juego de método 'for # (NameError)". Entiendo el problema de alguna manera, pero no creo que esa ciudad necesite saber nada sobre el objeto de juego , creo que solo tiene que obtenerlo y devolverlo. Pero aparentemente tengo un malentendido acerca de cómo pasar variables (especialmente el nombre de clase) entre clases. ¿Qué está mal en mi diseño?Cómo pasar un nombre de clase como una variable a otra clase en ruby
#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
No veo dónde está pasando el nombre de la clase aquí. –
Además, arregle su nombre. Debería ser 'city.rb' y' game.rb' (nombres de archivo - snake_case, nombres de clase - PascalCase). –
Gracias por la sugerencia. Traté de pasar el nombre de clase como engine en game.rb # 6 como self y en game.rb # 9 como motor variable. Esto es probablemente donde estoy equivocado. ¿Me puede dar un ejemplo sólido de cómo pasar un nombre de clase a otra clase, totalmente aparte de mi ejemplo? – barerd