0

私は最初のプログラム、簡単なやることリストをやっています。番号を入力して、対応する項目をリストから削除できるようにしたい。

ただし、毎回、「nil から integer への暗黙的な変換はありません」というメッセージが表示されます。私はそれを解決できないようです。何か案は?

$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

の正しい使用方法については、http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-delete_atを参照してくださいArray#delete_at

あなたがしていることは#index、配列に含まれていない番号で呼び出すことです。したがって、$list.index(del)が返さnilれ、への呼び出し#delete_atは失敗します。

あなたがする必要があるのはです$list.delete_at(del)

于 2012-10-20T21:41:50.843 に答える
1

インデックスとしてTypeError: no implicit conversion from nil to integer使用して配列の要素にアクセスしようとすると、エラーが発生します。あなたの場合、 nilが渡されているnilように見えます:delete_at

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