我有以下代码:
Array.class_eval do
def abs_sort
new_array = self
self.each do |x|
new_array.push(x.abs)
end
return new_array.sort
end
end
当我尝试运行代码时:
[1, 4, -2].abs_sort
没有任何反应,只是显示一个空白屏幕。为什么呢?
答案 0 :(得分:5)
您需要将new_array
设置为实际的新数组,而不是self
:
new_array = []
发生的事情是,new_array
self
是{{1}},你在迭代它时将项目添加到数组的末尾,这意味着迭代永远不会结束,因为你总是有更多的项目,你的方法无限循环。
答案 1 :(得分:2)
初始化new_array
时出错了。无论如何,这是一个更简洁的解决方案:
Array.class_eval do
def abs_sort
map(&:abs).sort
end
end