1

Ruby の sort 関数とブロックを理解しようとしているだけで、次のコードを思いつきました。

a = [1,2,3]
a.sort do |x,y|
  x
end

x2 つの要素を並べ替える要因として、返されることはありませんか? 次の動作が期待されます。

  1. 1,2ブロックパラメータとして渡され、1返されます。
  2. 2,3ブロックパラメータとして渡され、2返されます。
  3. 1,3ブロックパラメータとして渡され、3返されます。

戻り値を考えると、ソートされた配列はまだ ではない[1,2,3]でしょうか? どこが間違っているのですか?

4

1 に答える 1

7

ブロックは、、またはを返す必要が あります。値が渡される順序について保証があるとは思いません。戻り値との契約を尊重していないため、結果は未定義です。-101

実際には、私が信じていることは、常に正の値を返しているため、2 番目 (配列の後半) の値が常に前に移動されるということです。ただし、ドキュメントによると、これは保証されていません。

これは、多かれ少なかれあなたの説明のように動作します:

a = [1,2,3]
a.sort do |x,y|
  x <=> y
end
于 2012-08-06T06:12:08.780 に答える