Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby NameError:未初始化的常量游戏_Ruby - Fatal编程技术网

Ruby NameError:未初始化的常量游戏

Ruby NameError:未初始化的常量游戏,ruby,Ruby,我有一个Word.rb文件 class Word attr_accessor :word, :letters def initialize (word) #@word = word @letters = word.split('').map{|letter| {:letter => letter, :hidden => true} } end end 另一个文件Game.rb将使用Word.rb require_relative

我有一个Word.rb文件

class Word

attr_accessor :word, :letters

    def initialize (word)
        #@word = word
        @letters = word.split('').map{|letter| {:letter => letter, :hidden => true} }
    end

end
另一个文件Game.rb将使用Word.rb

require_relative ('./Word.rb') 
require 'pry'

class Game 

attr_accessor :guesses, :guessed_letters, :words, :current_word

    def initialize (words)
        @guesses = 0
        @guessed_letters = []
        @words = words
        @current_word = current_word
    end
end
我得到了以下错误:

NameError:未初始化的常量游戏

当我尝试创建这样一个游戏实例时:

game = Game.new(['hello', 'sunshine', 'chipmunk', 'twitch'])
我只是不确定我做错了什么,因为我需要
Game.rb
所需的
Word.rb
文件。所有文件都在同一级别,子目录中没有任何内容。有趣的是,一旦我注释了
require\u relative
行,就不会出现这个错误(当然,我需要这个文件required)。我还尝试过不使用
require\u relative
和简单地使用
require
以及一些其他变体:parens/no parens、文件扩展名/无文件扩展名等。我如何正确地要求这个文件?我还有一个可爱而健壮的单词数组,它位于另一个文件中,我希望使用它并将其传递到
Game.new()

看看我做了什么

$ mkdir test
$ cd test
$ gedit Word.rb
# and copied your content and saved
$ gedit Game.rb
# and copied you content and saved
$ irb
在IRB会话运行之后,我执行了以下操作

2.1.1 :001 > game = Game.new(['asd'])
NameError: uninitialized constant Game
    from (irb):1
    from /home/shiva/.rvm/rubies/ruby-2.1.1/bin/irb:11:in `<main>'
2.1.1 :002 > require 'game'
LoadError: cannot load such file -- game

2.1.1 :004 > require 'Game.rb'
LoadError: cannot load such file -- Game.rb

2.1.1 :005 > require './Game.rb'
 => true 
2.1.1 :006 > game = Game.new(['shiva', 'bhusal'])
 => #<Game:0x00000003085428 @guesses=0, @guessed_letters=[], @words=["shiva", "bhusal"], @current_word=nil> 
2.1.1 :007 >
2.1.1:001>game=game.new(['asd'])
NameError:未初始化的常量游戏
来自(irb):1
from/home/shiva/.rvm/rubies/ruby-2.1.1/bin/irb:11:in`'
2.1.1:002>要求“游戏”
LoadError:无法加载此类文件--游戏
2.1.1:004>要求“Game.rb”
LoadError:无法加载这样的文件--Game.rb
2.1.1:005>要求“./Game.rb”
=>正确
2.1.1:006>游戏=game.new(['shiva','bhusal']))
=> # 
2.1.1 :007 >

试着这样做

你把game=game.new放在哪里,在哪个文件中?我问的原因是我无法复制你的问题。现在我只是在终端中运行这个(所有命令),所以game=game.new()也是在终端中创建的。你在REPL(IRB/PRY)会话中需要game.rb吗?是的,默认情况下,没有自动加载。因此,如果你想要存储在另一个文件中的数据,你需要它(require_relative“Game”)应该做你想做的事情。此外,大多数Ruby开发者倾向于使用小写文件名,因为根据文件系统的大小写敏感度,你可能会遇到问题(Word.rb和Word.rb不是同一个文件,等等)谢谢:)另一位没有将他的解决方案作为答案发表的评论者帮我找到了答案。