代码不执行?

Bob*_*les 0 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
Run Code Online (Sandbox Code Playgroud)

当我尝试运行代码时:

[1, 4, -2].abs_sort
Run Code Online (Sandbox Code Playgroud)

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

And*_*all 5

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

new_array = []
Run Code Online (Sandbox Code Playgroud)

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