この再帰メソッドが返される理由がわかりませんNoMethodError: undefined method '[]' for nil:NilClass
def test_method(a, b)
(a[0] == b[0] ? 0 : 1) + test_method(a[1..-1], b[1..-1])
end
編集:引数を比較するために文字列を送信しています。
この再帰メソッドが返される理由がわかりませんNoMethodError: undefined method '[]' for nil:NilClass
def test_method(a, b)
(a[0] == b[0] ? 0 : 1) + test_method(a[1..-1], b[1..-1])
end
編集:引数を比較するために文字列を送信しています。
これは、aとbが空の配列であるかどうかをチェックしていないためです。一度にそれは空の配列に減少します
電話をかける前に、次のように書く必要があります
if not (a.empty? or b.empty?)
(a[0] == b[0] ? 0 : 1) + test_method(a[1..-1], b[1..-1])
end
実際には、一度に、それは空の文字列に減少し、次にnilに減少します。そして、NoMethodError:undefined method'[]' for nil:NilClassを引き起こします。
このようなことが起こっています:
'ss'[1..-1] => 's'
'ss'[1..-1][1..-1] => ""
'ss'[1..-1][1..-1][1..-1] => nil
ますます小さい配列/文字列/その他を反復処理しているため、その最後に到達することを考慮する必要があります。あなたが何を達成しようとしているのかはわかりませんが、これで少なくとも爆発を防ぐことができます:
def test_method(a, b)
return 0 if a.nil? || b.nil?
(a[0] == b[0] ? 0 : 1) + test_method(a[1..-1], b[1..-1])
end