我試圖學會在ruby中創建多類程序。我編寫了一個Engine類和一些其他類,比如城市,街道等,並且在將類名稱作爲變量傳遞給其他類時遇到了問題。下面的代碼會拋出錯誤:「City.rb:15:in'intro':未定義的局部變量或方法遊戲'for#(NameError)」。我從某種意義上理解了這個問題,但我認爲這個城市不需要知道關於遊戲對象的任何信息,我認爲它只需要得到它並將其傳回。但出乎意料地,我對如何在類之間傳遞變量(特別是類名)有誤解。我的設計出了什麼問題?如何將類名作爲變量傳遞給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
我沒有看到你在這裏傳遞類名的地方。 – 2012-03-20 08:58:56
另外,修復你的命名。應該是'city.rb'和'game.rb'(文件名--snake_case,類名--PascalCase)。 – 2012-03-20 08:59:59
感謝您的提示。我試圖將game.rb#6上的類名作爲引擎傳遞給self,並將它作爲可變引擎傳遞給game.rb#9。這可能是我誤解的地方。你能給我一個關於如何將類名傳遞給另一個類的可靠例子,完全不同於我的例子嗎? – barerd 2012-03-20 09:09:25