From: Akinori MUSHA Date: 2010-09-09T00:09:52+09:00 Subject: [ruby-dev:42200] Re: Enhancing Numeric#step --pgp-sign-Multipart_Thu_Sep__9_00:08:13_2010-1 Content-Type: text/plain; charset=ISO-2022-JP At Wed, 8 Sep 2010 22:46:57 +0900, matz wrote: > In message "Re: [ruby-dev:42194] Enhancing Numeric#step" > on Wed, 8 Sep 2010 21:58:11 +0900, "Akinori MUSHA" writes: > > | 現在、 Numeric#step は limit を必須引数としているため、手軽に > |無限数列を生成することができません。Float::INFINITY ないし 1/0.0 > |のような値を渡せば可能ではありますが、「1から上限なしでカウント > |アップする」のようなよくある要件を満たす方法としては冗長です。 > | > | そこで、上限(下限)なしでループするように limit も省略可能とし、 > |なおかつ増分のみの指定もできるように疑似キーワード引数を導入して > |みました。 > | > |1.step {|i| ... } # i = 1, 2, 3, ... > |-1.step(by:-1) {|i| ... } # i = -1, -2, -3, ... > |1.0.step(by: 0.1, to: 2.0).to_a # [1.0, 1.1, ..., 2.0] (余談:誤差に注意) > |2.step(by:2).take(100) # [2, 4, 6, ..., 200] > | > | キーワードを by: と to: にしたので、従来のように順序で意味を > |表すより読みやすいと思います。いかがでしょうか。 > > キーワード引数を付けるなら、stepよりはtoの方が向いているケー > スもありそうな気がします。結局stepという名前を受け入れられる > かどうかがポイントですね。  「stepよりはtoの方が向いているケースもありそう」の意味が取れ ませんでした。逆かな?(でも 1.step(step: 2) は重言すぎる…) > 個人的には違和感ありなんですが、stepを「進む」と動詞でとらえ > るなら許容できるのかも。  私はもともとその意味で捉えていました。増分指定は第二引数で、 しかも省略可能なので step を増分を意味する名詞と捉えるのは少々 不自然です。上限を指定する 1.step(10) が基本用法ですが、これは 「(1から)10まで進める(step to 10)」と読まれるでしょう。  上限を指定しなかったらずっと繰り返すのは自然だと思いますし、 日頃から 1.step(10, 2) という表現を読みづらく感じていたので、 今回の提案に至りました。 -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Thu_Sep__9_00:08:13_2010-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEABECAAYFAkyHpt0ACgkQkgvvx5/Z4e5bqwCg1S0e4zJjrP22H00z28r90EYR QV4AoMgN0UEp24lA/EuERMmD23OeQsh/ =O9b+ -----END PGP SIGNATURE----- --pgp-sign-Multipart_Thu_Sep__9_00:08:13_2010-1--