Ruby 红宝石罐';使用require\u relative时找不到类

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,就像我以前做的那样。现在,在这个文件中,我得到: 未初始化常量游

作为作业的一部分,我尝试使用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:

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:in
require\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