【发布时间】:2015-05-06 02:02:40
【问题描述】:
我是一名 ruby 新手,正在学习编码。我想了解Enumerable 模块提供的一些方法是如何工作的。所以我正在重新实现它们。一个挑战是使用递归来实现它们。但是,我在尝试使用递归实现 Enumerable#Map 方法时遇到了问题。
这是我的代码:
class Array
def mymap_recursive(&block)
copy_of_array = dup
new_array = []
return new_array if copy_of_array.empty?
value = copy_of_array.shift
new_array << yield(value)
copy_of_array.mymap_recursive(&block)
end
end
我试图弄清楚为什么它不起作用,所以我放了
puts "#{new_array}"
在方法结束时。然后在 Sublime Text 中,我做到了
arr = [2,2,5,5,10]
arr.mymap_recursive {|n| n * n}
按cmd+b后,我得到的输出是:
[100]
[25]
[25]
[4]
[4]
我不明白为什么它没有返回一个包含所有值的数组。
感谢您的帮助!
【问题讨论】:
-
如果数组副本为空,则在第 3 行返回 new_array(即 [])。你把它和其他东西放在哪里?
-
对我来说,第 3 行代表基本情况,如果条件为真,递归应该中断。我以为它只会返回一个包含所有值的 new_array。
-
是的,这是基本情况......它只会返回 new_array 没有任何内容......因为这就是你将 [] 分配给它之后它所拥有的......;)您还必须有一个案例,其中包含 something 的 new_array