0

我有以下代码:

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

什么都没有发生,它只是显示一个空白屏幕。为什么?

4

2 回答 2

5

您需要设置new_array为实际的新数组,而不是self

new_array = []

发生的事情是,因为new_arrayis self,您在迭代它时将项目添加到数组的末尾,这意味着迭代永远不会结束,因为您总是有更多的项目,并且您的方法无限循环。

于 2012-05-11T02:16:52.763 回答
2

你在初始化时犯了一个错误new_array。无论如何,这是一个更简洁的解决方案:

Array.class_eval do
  def abs_sort
    map(&:abs).sort
  end
end
于 2012-05-11T02:24:46.727 回答