0

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

不过,每次我都得到“没有从零到整数的隐式转换”。我似乎无法解决它。有任何想法吗?

$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 }
4

2 回答 2

1

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

[ 1, 2, 3 ].delete_at(nil)
# => TypeError: no implicit conversion from nil to integer
于 2012-10-20T21:34:53.783 回答
1

有关正确使用Array#delete_at.

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

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

于 2012-10-20T21:41:50.843 回答