“没有从nil到整数的隐式转换”

时间:2012-10-20 21:31:03

标签: ruby

我正在做我的第一个程序,一个简单的待办事项列表。我想让它输入一个数字,然后从列表中删除相应的项目。

每次,我得到“没有从nil到整数的隐式转换”。我似乎无法解决这个问题。有什么想法吗?

$list = Array.new

def mainmethod
  puts "Enter new item, or type 'view' to view the list, 'delete' to delete items"
  input = gets.chomp

  if input.downcase == "view"
    puts "Your to do list is as follows:"
    puts $list

  elsif input.downcase == "delete"
    puts "Which item would you like to delete? (Enter a number)"
    deletenumber = gets.chomp.to_i
    deletenumber-=1
    delete_list = [deletenumber]
    delete_list.each do |del|
      $list.delete_at($list.index(del))
    end

  else
    $list << input
    puts "Added to list!"
  end
end

loop { mainmethod }

2 个答案:

答案 0 :(得分:1)

当您尝试使用TypeError: no implicit conversion from nil to integer作为索引访问数组的元素时,会发生错误nil。在你的情况下,似乎delete_at被传递为nil:

[ 1, 2, 3 ].delete_at(nil)
# => TypeError: no implicit conversion from nil to integer

答案 1 :(得分:1)

有关使用Array#delete_at的正确方法,请参阅http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-delete_at

您所做的是使用您的数组不包含的数字调用#index。因此,$list.index(del)将返回nil,并且对#delete_at的调用将失败。

您需要做的是$list.delete_at(del)