Ruby 红宝石罐';使用require\u relative时找不到类
作为作业的一部分,我尝试使用gosu gem制作一个简单的蛇游戏。我被指示遵循以下指南: 我已经走得很远了,可以初始化一个snake游戏,但是我把它放在snake.rb文件中,并意识到它应该在game.rb文件中。我使用require_relative链接到snake.rb,并尝试创建snake类的新实例,该实例为我提供了: 未初始化常量Snake(NameError) 我回到snake.rb文件并尝试从那里创建一条新的snake,就像我以前做的那样。现在,在这个文件中,我得到: 未初始化常量游戏(名称错误) 似乎snake.rb找不到game.rb,反之亦然,尽管它们在同一个文件夹中,我使用require_relative。代码如下: game.rb:Ruby 红宝石罐';使用require\u relative时找不到类,ruby,libgosu,Ruby,Libgosu,作为作业的一部分,我尝试使用gosu gem制作一个简单的蛇游戏。我被指示遵循以下指南: 我已经走得很远了,可以初始化一个snake游戏,但是我把它放在snake.rb文件中,并意识到它应该在game.rb文件中。我使用require_relative链接到snake.rb,并尝试创建snake类的新实例,该实例为我提供了: 未初始化常量Snake(NameError) 我回到snake.rb文件并尝试从那里创建一条新的snake,就像我以前做的那样。现在,在这个文件中,我得到: 未初始化常量游
require 'gosu'
require_relative 'snake'
class Game < Gosu::Window
def initialize(width, height)
super width, height
end
end
但是,它不起作用。有什么想法吗
编辑:要求游戏只包含3.rb文件。其中一个名为game.rb,它有game类,在运行时也会启动游戏。其中一个名为snake.rb,只有snake类。其中一个名为food.rb,它只有一个食物类,用于蛇试图捕捉的食物。snake类继承自game,game继承自gosu::window那些
namererror
异常的发生是因为常量在实际定义之前就被引用了
这是由于循环依赖性造成的:
需要game.rb
snake.rb
需要snake.rb
game.rb
- 在定义蛇之前定义游戏
- 在调用
Snake.new之前定义
Snake
# game.rb
require 'gosu'
class Game < Gosu::Window
def initialize(width, height)
super width, height
end
end
require_relative 'snake'
Snake.new.show
你能添加你得到的全部输出吗?回溯(最近一次通话):4:from lib/game.rb:2:in
'3:from lib/game.rb:2:inrequire\u relative'2:from/Users/karin/code/karinknutsson/fullstack challenges/02-OOP/02 OO-Advanced/Optional-02-Gosu-game/lib/snake.rb:2:in'1:from/Users/karin/code/code/karinknutsson/fullstack challenges/02-OO-Advanced/02-Gosu-game/lib/snake.rb:2:in
require_relative'/Users/karin/code/karinknutsson/fullstack challenges/02-OOP/02-OO Advanced/Optional-02-Gosu-Game/lib/Game.rb:10:in`:未初始化常量Snake(名称错误)谢谢!我不能这样做,因为作业说明说明game.rb文件应该运行游戏,并且其中还有一个名为game的类,即snake类的父类。因此,我们不允许单独运行.rb文件。在这种情况下,只需在Game.rb
中定义两个类,Game
和Snake
,就可以了。指令是将Snake类放在单独的文件中,而不是放在Game.rb中。最后,我让snake从gosu::window继承,这似乎是一个足够好的解决方案。我很高兴你澄清了循环依赖的问题!这是非常好的消息。你能编辑你的问题并添加所有相关的细节/要求吗?我已经相应地更新了我的答案,希望能有所帮助
Snake.new.show
# game.rb
require 'gosu'
class Game < Gosu::Window
def initialize(width, height)
super width, height
end
end
require_relative 'snake'
Snake.new.show
# snake.rb
class Snake < Game
SIZE = 20
def initialize
# ...
end
end