土岐です。

From: Koji Arai <JCA02266 / nifty.ne.jp>
Subject: [ruby-list:11684] Re: Numeric#step の増減方向
Date: Sat, 23 Jan 1999 03:12:21 +0900

> 例えば、
> 
>  - Method on `Numeric': step (LIMIT, STEP) {...}
> 
>      selfからLIMITまでSTEPずつ足しながら(または減
>      らしながら)繰り返します。
> 
> ですか?(うーん、ドキュメント書くのは苦手です)

もうちょっと丁寧に説明した方がいいかも。でもあんまりくどいと、割とあっ
さり説明されてる他のメソッドと比較して浮いてしまうので、難しいですね。

    STEPが正ならselfからSTEPずつ増やしながらLIMITより大きくなるまで繰り返
    します。STEPが負なら逆にSTEPずつ減らしながらLIMITより小さくなるまで繰
    り返します。

こんな感じでどうでしょう。

> > # step の逆向きは無いのかと思っていたのはわたしだけでしょうか?
> 
> 私は、存在すら知りませんでした(^^;

Ruby はイテレータが充実してるのでわざわざ Numeric#step で数のループを
周す必要はほとんど無いから、知らなかったのも不思議ではないと思います。
実際、わたしも存在は知っていてもほとんど使ってなかったです。

わたしの場合は、Ruby を使いはじめたころに C や Perl の for(;;){} 構文
に対応するものはないのかとおもってリファレンスマニュアルを探したところ、
Numeric#step を見つけたので印象に残っていたみたいです。でもこのとき

    num.step(MAX, STEP) {}

イコール

    for(i = num; i < MAX; i += STEP) {}

と対応づけてしまったので、Numeric#step は増加方向にしか進まないという
先入観を持ってしまったのでした。実際には

    if (STEP > 0) {
      for (i = num; i <= MAX; i += STEP) {}
    } else {
      for (i = num; i >= MAX; i += STEP) {}
    }

だったわけですが。

----------------------------------------------------------------------------
土岐 仁謙	神戸大学高エネ研 M1
URL: http://www3.phys.sci.kobe-u.ac.jp/~toki/index.html
PGP fingerprint = D0 A8 90 AB 73 F8 34 FE  CE CA DB BF 01 30 C0 35