修飾子ではまる

Ruby の修飾子は使わない人なので、Algol 風の教科書コードからの書き換えでしくった

-- 元のコード

repeat i := i + 1; until a[i] >= pivot;

これを Ruby

# Ruby

i += 1 until a[i] >= pivot

とやってしまった。普通の修飾子であるので、本体が評価される前に until の条件が評価されてしまう
正しくは

# Ruby

begin i += 1 end until a[i] >= pivot

式が begin〜end であった場合は、まず一回実行されるようになる。この、特定の場合だけふるまいが異なるというのは驚き最小の法則的にどうなんだろう