递归方法返回未定义的方法“[]”
我不知道为什么这个递归方法" title="递归方法">递归方法返回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方法'[]'为nil:NilClass。
像这样的事情正在发生:
'ss'[1..-1] => 's' 'ss'[1..-1][1..-1] => ""
'ss'[1..-1][1..-1][1..-1] => nil
回答:
这是因为您没有检查a和b是否为空数组。曾经有一段时间,这将减少对空数组
打电话之前,你应该写
if not (a.empty? or b.empty?) (a[0] == b[0] ? 0 : 1) + test_method(a[1..-1], b[1..-1])
end
回答:
既然你遍历一个更小的阵列/串/不管,你必须考虑达到它的结束。我不知道你要完成什么,但是这至少可以阻止它被炸毁:
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
以上是 递归方法返回未定义的方法“[]” 的全部内容, 来源链接: utcz.com/qa/260431.html