Forum: Ruby-dev [ruby-trunk - Feature #8838][Open] Enhancing Numeric#step

6789224081b49822eb70f6740beb5ed5?d=identicon&s=25 knu (Akinori MUSHA) (Guest)
on 2013-08-30 17:47
(Received via mailing list)
Issue #8838 has been reported by knu (Akinori MUSHA).

----------------------------------------
Feature #8838: Enhancing Numeric#step
https://bugs.ruby-lang.org/issues/8838

Author: knu (Akinori MUSHA)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: misc
Target version: current: 2.1.0


DevelopersMeeting20130831Japan用に起票します。

ちょうど3年ほど前、 [ruby-dev:42194] で私が提案したのが以下の内容です。

>
> 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: にしたので、従来のように順序で意味を
> 表すより読みやすいと思います。いかがでしょうか。

これについては、[ruby-dev:42204]にて「一晩考えた」まつもとさんにOKをい
ただきました。ただ、ここからC APIを設けようという方向に話が進みました。

> 一晩考えて、stepメソッドへの拡張そのものには賛成しようと思い
> ました。ただ、今後キーワード引数を取るメソッドが増加すること
> が容易に想像できますので、C APIでもキーワード引数に対応した
> いと思います。

それを私の方でうまくまとめきれず、尻切れとんぼになってしまいました。


それから3年経ち、Ruby 2.0では「本物の」キーワード引数文法が導入されまし
たが、Cレベルでキーワード引数をdestructureするようなAPIはまだありません。

Enumeratorの進化(Enumerator::Lazyの導入等)で無限数列を手軽に生成した
いシーンは増えていると思いますが、 Enumerator#with_index(n=0) が使える
ケースを除けば、上記提案にもある通り、 1.upto(Float::INFINITY) などと書
くしかなく、スマートとは言いがたい現状です。

そこで、APIは別途議論するとして、機能としては2.1で入れてしまいませんか
というのが今回の提案です。
6789224081b49822eb70f6740beb5ed5?d=identicon&s=25 knu (Akinori MUSHA) (Guest)
on 2013-08-31 10:30
(Received via mailing list)
Issue #8838 has been updated by knu (Akinori MUSHA).

Category changed from misc to core
Status changed from Open to Assigned
Assignee changed from matz (Yukihiro Matsumoto) to knu (Akinori MUSHA)

=begin
[[DevelopersMeeting20130831Japan]]にてまつもとさんにOKをいただきましたので、近いうちに入れます。
=end

----------------------------------------
Feature #8838: Enhancing Numeric#step
https://bugs.ruby-lang.org/issues/8838#change-41485

Author: knu (Akinori MUSHA)
Status: Assigned
Priority: Normal
Assignee: knu (Akinori MUSHA)
Category: core
Target version: current: 2.1.0


DevelopersMeeting20130831Japan用に起票します。

ちょうど3年ほど前、 [ruby-dev:42194] で私が提案したのが以下の内容です。

>
> 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: にしたので、従来のように順序で意味を
> 表すより読みやすいと思います。いかがでしょうか。

これについては、[ruby-dev:42204]にて「一晩考えた」まつもとさんにOKをい
ただきました。ただ、ここからC APIを設けようという方向に話が進みました。

> 一晩考えて、stepメソッドへの拡張そのものには賛成しようと思い
> ました。ただ、今後キーワード引数を取るメソッドが増加すること
> が容易に想像できますので、C APIでもキーワード引数に対応した
> いと思います。

それを私の方でうまくまとめきれず、尻切れとんぼになってしまいました。


それから3年経ち、Ruby 2.0では「本物の」キーワード引数文法が導入されまし
たが、Cレベルでキーワード引数をdestructureするようなAPIはまだありません。

Enumeratorの進化(Enumerator::Lazyの導入等)で無限数列を手軽に生成した
いシーンは増えていると思いますが、 Enumerator#with_index(n=0) が使える
ケースを除けば、上記提案にもある通り、 1.upto(Float::INFINITY) などと書
くしかなく、スマートとは言いがたい現状です。

そこで、APIは別途議論するとして、機能としては2.1で入れてしまいませんか
というのが今回の提案です。
This topic is locked and can not be replied to.