我有两种方法:Ruby中的递归问题:我是否遇到副作用?
def word_square_word_list
@word_list.each do |word|
return_value = find_next_word([word])
#check return_value here and it is completely different than what is returned from the find_next_word method.
return return_value if is_list_valid?(return_value)
end
end
def find_next_word(word_list_array)
if word_list_array.length == @size_of_square
#confirm word_list_array is what I expect here
word_list_array
else
start_of_next_word = word_list_array.map{|w| w[word_list_array.length]}.join
get_all_words_that_start_with(start_of_next_word).each do |word|
find_next_word(word_list_array + [word])
end
end
end
我可以用binding.pry
确认由find_next_word
返回word_list_array
其实正确的值。但是当我去检查返回值时,它是完全不同的东西。
我可以想出唯一的解释是,我正在经历实施的副作用。有没有人有什么想法可能会导致这一点?
如果'word_list_array.length == @ size_of_square'为false,那么'find_next_word'的返回值将是'get_all_words_that_start_with(start_of_next_word)'列表。递归在最终的返回值中丢失。 – Matt
@Matt,我通过pry证实,这不是虚假的,因为我最终在里面。但是,你解释的是我正在经历的症状。尽管如此,我认为这与Alex的解释有关。 –