代码不执行?

时间:2012-05-11 02:13:29

标签: ruby

我有以下代码:

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

没有任何反应,只是显示一个空白屏幕。为什么呢?

2 个答案:

答案 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