【问题标题】:Uninitialized constant in RubyRuby中未初始化的常量
【发布时间】:2017-11-21 00:01:54
【问题描述】:

我正在尝试在 CodeAcademy 上完成 this Ruby 教程。以下代码给了我错误

"未初始化的常量 List::Task (NameError) 从 to_do.rb:2:in main"

我知道这可能与 List 类无法访问 Task 类有关,但我看不出这会在哪里发生故障?代码如下。

   #list class

   class List
    attr_reader :all_tasks
    if __FILE__ == $PROGRAM_NAME
      my_list = List.new
      puts 'You have created a new list'
      my_list.add(Task.new('Make Breakfast'))
      puts 'You have added a task to the Todo List'
   end

   def initialize
    @all_tasks = []
   end

 def add(task)
  @all_tasks << task
 end


 end


 #class task

 class Task
  attr_reader :description

  def task_item(desription)
   @new_item = description
  end
end

【问题讨论】:

  • 任何错误跟踪?
  • __FILE__ == $PROGRAM_NAME 。将其移出类或调用该方法。当这个评估为真时,它将运行并尝试访问尚未定义的任务。从initialize 调用此方法是一种很好的做法。

标签: ruby


【解决方案1】:

在你运行这条线的那一刻

my_list.add(Task.new('Make Breakfast'))

Task 尚未定义。这会在几行之后发生。

只需交换 TaskList 类的定义即可。

【讨论】:

  • 既没有定义列表的初始化程序,也没有定义add,OP 很快就会发现它们。此脚本必须从 List 类中提取并移至文件末尾。
【解决方案2】:

当您从命令行将该文件作为脚本运行时,声明顺序很重要。如果您将 Task 的声明移到 List 上方,您会发现它会修复相关错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多