Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 Can';我不明白为什么我';我得到一个'initialize';:未初始化的常量控制器::视图(NameError)_Ruby_Nameerror - Fatal编程技术网

Ruby Can';我不明白为什么我';我得到一个'initialize';:未初始化的常量控制器::视图(NameError)

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

我试图理解为什么会出现这个错误,我怀疑这是因为我的控制器类和视图类在两个单独的Ruby文件中。我被告知使用require_relative'filename'应该将所有代码从一个文件引用到另一个文件中,但我似乎遗漏了一些东西。好了,开始吧

controller.rb文件中,我有

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”
,因为您的
视图
类没有使用任何
控制器
代码。是的,就是这样。非常感谢你,大卫。是的,就是这样。非常感谢你,大卫。