Howto passer un nom de classe comme une variable à une autre classe en ruby

Je suis en train d'apprendre à créer un multi classe programme en ruby. J'ai codé un Moteur de classe et d'autres classes comme la ville, la rue, etc. et je rencontre des problèmes en passant le nom de la classe comme une variable à d'autres classes. Le code ci-dessous génère l'erreur: "la Ville.rb:15:dans 'intro': undefined variable locale ou de la méthode de jeu " pour # (NameError)". Je comprends le problème dans un sens, mais je ne pense pas que la ville a besoin de savoir quelque chose au sujet de
objet de jeu, je pense qu'il n'a qu'à le recevoir et transmettre. Mais appearantly j'ai un malentendu à propos de comment passer des variables (en particulier le nom de la classe) entre les classes. Ce qui est faux dans mon design?

#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
Je ne vois pas où vous êtes de passage le nom de classe ici.
Aussi, fixer votre dénomination. Devrait être city.rb et game.rb (les noms de fichiers - snake_case, les noms de classe - PascalCase).
Merci pour l'astuce. J'ai essayé de passer le nom de la classe en tant que moteur du jeu.rb#6 en tant que soi et sur jeu.rb n ° 9 comme variable de moteur. C'est probablement là où je me trompe. Pouvez-vous me donner un très bon exemple de comment passer le nom d'une classe à une autre classe, totalement en dehors de mon exemple?
En passant self est très bien, mais à l'intérieur de votre intro méthode dans la Ville.rb je pense que vous devriez être à l'aide de engine.play plutôt que game.play. Vous sont également manquants où vous assigner quelque chose à @street...
Avez-vous besoin de passer une instance de la classe ou du nom de la classe ou de la classe de l'objet?

OriginalL'auteur barerd | 2012-03-20