如何为nil:NilClass

时间:2019-08-15 08:33:26

标签: ruby

我有3条错误消息,我相信它们都与一件事有关-我在未正确定义的对象上调用方法。

我已经检查了错别字,空格,语法和命名。我正在遵循与该程序中其他所有测试都正常的方法相同的过程。

我已经缩小了循环范围,并相信问题出在这里:

def add(param)
  @param << param

在完整的上下文中显示代码:

class Todo

  def initialize(param)
    @param = param
  end

  def text
    return @param
  end
end

class TodoList

  def initialize
    @item_list = []
  end

  def add(param)
    @param << param
  end

  def print
    @item_list.each do |param|
      puts "* #{param.text}" #=> .text?
    end
  end
end

错误消息:

这是我要解决的错误消息。正如我之前提到的,它们看上去都指向一个我没有正确定义的方法,但是我还无法弄清楚为什么会这样。

1)问题1。待办事项列表TodoList添加待办事项会添加待办事项而不会引发错误      失败/错误:期望{todo_list.add(todo)} .to_not提高错误

   expected no Exception, got #<NoMethodError: undefined method `<<' for nil:NilClass> with backtrace:
     # ./questions/question_1.rb:43:in `add'
     # ./spec/question_1_spec.rb:31:in `block (5 levels) in <top (required)>'
     # ./spec/question_1_spec.rb:31:in `block (4 levels) in <top (required)>'
 # ./spec/question_1_spec.rb:31:in `block (4 levels) in <top (required)>'

2)问题1。待办事项列表TodoList打印待办事项一个待办事项打印一个带有要点的待办事项      失败/错误:todo_list.add(todo)

 NoMethodError:
   undefined method `<<' for nil:NilClass
 # ./questions/question_1.rb:43:in `add'
 # ./spec/question_1_spec.rb:41:in `block (5 levels) in <top (required)>'

3)问题1。待办事项列表TodoList打印待办事项许多待办事项会打印待办事项,并以换行符分隔      失败/错误:todo_list.add(todo_1)

 NoMethodError:
   undefined method `<<' for nil:NilClass
 # ./questions/question_1.rb:43:in `add'
 # ./spec/question_1_spec.rb:59:in `block (5 levels) in <top (required)>'

谢谢!

2 个答案:

答案 0 :(得分:1)

红宝石不知道您的TodoList类中的@param是什么,您必须像解决问题的@param = []这样的构造函数中对其进行初始化

答案 1 :(得分:0)

默认情况下,实例变量被初始化为nil,因此会出现错误。因此,在您的TodoList类中,您需要将@param初始化为一个可以响应<<的对象,在您自己的情况下,该对象是一个数组[]

class TodoList
  def initialize
    @param = []
  end
end