我正在做我的第一个程序,一个简单的待办事项列表。我想让它输入一个数字,然后从列表中删除相应的项目。
每次,我得到“没有从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 }
答案 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)
。