Ruby Can';我不明白为什么我';我得到一个'initialize';:未初始化的常量控制器::视图(NameError)
我试图理解为什么会出现这个错误,我怀疑这是因为我的控制器类和视图类在两个单独的Ruby文件中。我被告知使用require_relative'filename'应该将所有代码从一个文件引用到另一个文件中,但我似乎遗漏了一些东西。好了,开始吧 在controller.rb文件中,我有Ruby Can';我不明白为什么我';我得到一个'initialize';:未初始化的常量控制器::视图(NameError),ruby,nameerror,Ruby,Nameerror,我试图理解为什么会出现这个错误,我怀疑这是因为我的控制器类和视图类在两个单独的Ruby文件中。我被告知使用require_relative'filename'应该将所有代码从一个文件引用到另一个文件中,但我似乎遗漏了一些东西。好了,开始吧 在controller.rb文件中,我有 require_relative 'view' require_relative 'deck_model' require_relative 'flashcard_model' class Controller
require_relative 'view'
require_relative 'deck_model'
require_relative 'flashcard_model'
class Controller
def initialize
@deckofcards = Deck.new
@welcome = View.new.welcome
@player_guess = View.new.get_user_guess
@success_view = View.new.success
@failure_view = View.new.failure
end
def run
#Logic to run the game
# @current_card
# @user_guess
puts "Let's see if this prints"
# pull_card_from_deck
end
end
在我的view.rb文件中
require_relative 'controller'
class View
attr_accessor :userguess
def initialize (userguess = " ")
@userguess = userguess
end
def welcome
system ("clear")
puts "Welcome! Let's play a game."
puts "I'll give you a definition and you have to give me the term"
puts "Ready..."
end
def get_user_guess
@userguess = gets.chomp.downcase
end
def success
puts "Excellent! You got it."
end
def failure
puts "No, that's not quite right."
end
end
但是,当我运行controller.rb时,我得到以下错误:
/Users/sean/Projects/flash/source/controller.rb:11:in `initialize': uninitialized constant Controller::View (NameError)
from /Users/sean/Projects/flash/source/controller.rb:51:in `new'
from /Users/sean/Projects/flash/source/controller.rb:51:in `<top (required)>'
from /Users/sean/Projects/flash/source/view.rb:1:in `require_relative'
from /Users/sean/Projects/flash/source/view.rb:1:in `<top (required)>'
from controller.rb:1:in `require_relative'
from controller.rb:1:in `<main>'
/Users/sean/Projects/flash/source/controller.rb:11:in'initialized':未初始化的常量控制器::视图(NameError)
from/Users/sean/Projects/flash/source/controller.rb:51:in'new'
from/Users/sean/Projects/flash/source/controller.rb:51:in`'
from/Users/sean/Projects/flash/source/view.rb:1:in'require\u relative'
from/Users/sean/Projects/flash/source/view.rb:1:in`'
来自controller.rb:1:in'require\u relative'
来自控制器。rb:1:in`'
谁能帮我解决这个问题 您没有发布完整的代码,但听起来这是由您在项目中指定的循环依赖项引起的错误。您有
view.rb
取决于controller.rb
和controller.rb
取决于view.rb
。Ruby解释器不会同时执行这些文件;它必须先执行一个,然后再执行另一个
它看起来像是首先执行controller.rb
,但它看到view.rb
是必需的,所以它开始执行它。然后在view.rb
中,它看到需要controller.rb
,因此它再次开始执行controller.rb
。然后在controller.rb
中的某个点上,您必须创建controller
类的新实例。但是我们还没有定义视图
类,因此视图
是未定义的,您在尝试创建该控制器时会遇到异常
为了解决这个问题,您应该考虑不创建任何<代码>控制器<代码>或<代码>查看<代码>对象,直到两个类都被完全加载。
您没有发布完整代码,但听起来这是由您在项目中指定的循环依赖性引起的错误。您有view.rb
取决于controller.rb
和controller.rb
取决于view.rb
。Ruby解释器不会同时执行这些文件;它必须先执行一个,然后再执行另一个
它看起来像是首先执行controller.rb
,但它看到view.rb
是必需的,所以它开始执行它。然后在view.rb
中,它看到需要controller.rb
,因此它再次开始执行controller.rb
。然后在controller.rb
中的某个点上,您必须创建controller
类的新实例。但是我们还没有定义视图
类,因此视图
是未定义的,您在尝试创建该控制器时会遇到异常
修复此,您应该考虑不创建任何<代码>控制器< /> >或<代码>查看<代码>对象,直到两个类被完全加载。
< P> + 1到@ DavidGrayson注释。 如果我的假设是正确的,那么您的问题在于视图.rb文件中的require\u relative“controller”
如果您看到,它看起来像是视图
需要控制器
,然后加载控制器,它似乎将新的
发送到控制器
的某个位置,然后控制器将新的
发送到视图
,但它并不是完全需要的 +1至@DavidGrayson评论
如果我的假设是正确的,那么您的问题在于视图.rb文件中的require\u relative“controller”
如果您看到,它看起来像是视图
需要控制器
,然后加载控制器,它似乎将新的
发送到控制器
的某个位置,然后控制器将新的
发送到视图
,但它并不是完全需要的 您发布的回溯说明错误发生在/Users/sean/Projects/flash/source/controller.rb:51的第51行,但您发布的文件要短得多。请将您的全部代码和运行该代码时使用的确切命令+1发送到@DavidGrayson。我还想删除require\u relative'controller'
,因为您的视图类不使用任何控制器代码。您发布的回溯说明错误发生在/Users/sean/Projects/flash/source/controller.rb:51的第51行,但您发布的文件要短得多。请将您的全部代码和运行该代码时使用的确切命令+1发送到@DavidGrayson。我还要删除require\u相对的“controller”
,因为您的视图
类没有使用任何控制器
代码。是的,就是这样。非常感谢你,大卫。是的,就是这样。非常感谢你,大卫。