Howto pass der name einer Klasse als variable einer anderen Klasse in ruby

Ich versuche zu lernen, zu schaffen, ein multi-class-Programm in ruby. Ich codiert eine Engine-Klasse und einigen anderen Klassen, wie Stadt, Straße, etc. und habe Probleme, mich im Vorbeigehen den Namen der Klasse als variable zu den anderen Klassen. Der folgende code wirft den Fehler: "die Stadt.rb:15:in 'intro': undefined local variable oder Methode im Spiel für die # (NameError)". Ich verstehe das problem so, aber ich glaube nicht, die Stadt muss wissen, etwas über
Spiel-Objekt, ich denke es nur, um es zu bekommen, und übergeben Sie es zurück. Aber anscheinend habe ich ein Missverständnis darüber, wie zur übergabe von Variablen (insbesondere der name der Klasse) zwischen den Klassen. Was ist falsch in meinem 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
  • Ich sehe nicht, wo Sie auf der Durchreise sind Klasse Namen hier.
  • Auch fixieren Sie Ihre Namensgebung. Sollte city.rb und game.rb (Dateinamen - snake_case, Klassen - PascalCase).
  • Danke für den Tipp. Ich habe versucht, übergeben Sie den Klassennamen als Motor auf dem Spiel.rb#6 wie sich selbst und auf das Spiel.rb#9 als variable Motor. Dies ist wahrscheinlich, wo ich mich Irre. Können Sie mir ein solides Beispiel dafür, wie pass der name einer Klasse in eine andere Klasse, ganz abgesehen von meinem Beispiel?
  • Vorbei self ist in Ordnung, jedoch innerhalb Ihrer intro - Methode in der Stadt.rb ich denke, Sie sollten mit engine.play eher als game.play. Sie fehlen auch, wo Sie ordnen etwas zu @street...
  • Brauchen Sie, um eine Instanz von class oder class-Namen oder die Klasse object?
  • Ich Plane, pass, class-Objekt. Und ich denke, ich weiß es pass mit Motor-variable und sich selbst.
  • Spiel.spielen ist in Ordnung, da geht es den engine-Objekts Stadt. Wenn ich es ändern an der engine.spielen, es beschwert sich Undefinierte lokale variable oder Methode.
  • Sie sind vorbei Instanz der Klasse, nicht der Klasse object. Diese beiden sind anders.
  • Sorry für die späte Antwort, aber ich habe mal gegoogelt, für die mittlerweile, und konnte nicht finden, dass irgendetwas nützlich. Also wie gebe ich das class-Objekt?

InformationsquelleAutor barerd | 2012-03-20
Schreibe einen Kommentar