递归方法返回未定义的方法'[]'

时间:2012-09-11 19:14:27

标签: ruby

我不确定为什么这个递归方法会返回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

编辑:我发送的字符串用于比较它们的参数。

3 个答案:

答案 0 :(得分:1)

这是因为您没有检查a和b是否为空数组。有一次会减少为空数组

在打电话之前你应该写

 if not (a.empty? or b.empty?)
  (a[0] == b[0] ? 0 : 1) + test_method(a[1..-1], b[1..-1])
 end

答案 1 :(得分:1)

实际上,它一次会减少为空字符串然后变为零。然后导致NoMethodError:未定义的方法'[]'为nil:NilClass。

这样的事情正在发生:

'ss'[1..-1] => 's'
'ss'[1..-1][1..-1] => ""
'ss'[1..-1][1..-1][1..-1] => nil

答案 2 :(得分:1)

由于你正在迭代一个更小的数组/字符串/无论如何,你必须考虑到达它的结尾。我不知道你想要完成什么,但这至少会阻止它爆炸:

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
相关问题