我有两种方法:
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
确认word_list_array
返回的find_next_word
实际上是正确的值。但是当我去检查返回值时,它就完全不同了。
我能想出的唯一解释是,我正在经历实施的副作用。有没有人对可能导致这种情况的原因有任何想法?
答案 0 :(得分:1)
您似乎缺少一些代码,因为word_list_array
中的word_square_word_list
目前尚未定义。
如果您提供了出错的示例,将会很有帮助。也就是说,我怀疑问题在于:
get_all_words_that_start_with(start_of_next_word).each do |word|
find_next_word(word_list_array + [word])
end
您正在find_next_word
块中调用each
,但对结果不执行任何操作。 each
返回调用它的对象,因此find_next_word
案例中get_all_words_that_start_with(start_of_next_word)
的返回值为else
。
值得注意的是word_square_word_list
也存在问题。如果您尝试return
阻止each
阻止,则会获得LocalJumpError: unexpected return
例外。