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以降、 iterate するとき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 に答える