作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试学习用 ruby 创建一个多类程序。我编写了一个引擎类和一些其他类,如城市、街道等,但在将类名作为变量传递给其他类时遇到了问题。下面的代码抛出错误:“City.rb:15:in 'intro': undefined local variable or method game' for # (NameError)”。我在某种程度上理解这个问题,但我认为这个城市不需要知道任何关于游戏对象,我认为它只需要获取它并将其传回即可。但表面上我对如何在类之间传递变量(尤其是类名)有误解。我的设计有什么问题?
#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
最佳答案
你可以像往常一样传入一个类作为参数:
def use_class(myclass)
x = myclass.new "test"
x.read_name
end
use_class(City)
# returned -> ' You are in a city called "test".'
但是,您的错误与此无关。基本上,您正在尝试在类的范围内使用对象 game
但它尚不存在。
要将对 Game 实例的引用传递给类 city,您可以执行以下操作:
@city = City.new(city_name, self)
并将City的构造函数修改为
def initialize(city_name, game)
@city_name = city_name
@game = game
end
然后,City#intro 会:
@game.play(@street, :enter, @game)
可能还会有其他错误,因为 @street
还没有在 City 中定义,但那是另一回事。
关于ruby - 如何将类名作为变量传递给ruby中的另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783778/
我是一名优秀的程序员,十分优秀!