Ruby NameError:未初始化的常量游戏
我有一个Word.rb文件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
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不是同一个文件,等等)谢谢:)另一位没有将他的解决方案作为答案发表的评论者帮我找到了答案。