我试图学会在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