Issue #14845 has been updated by mame (Yusuke Endoh).


現状の挙動はそれはそれで便利そう※なので、early failure と便利さとのトレードオフです。どっちがいいでしょうね。

※たとえば SQL の DSL で `count: (min..max)` という Range を書いたとき、`max = nil` にするだけで「上限なし」を表現できるという使い方が考えられます。`(1..nil)` がエラーになると、`count: max ? (min..max) : (min..)` とかいう記述が必要になり、DSL としては終了です。

問題を `to_a` に限れば、`(1..nil).to_a` や `enum.cycle.to_a` のように、明らかに停止しない `to_a` 呼び出しを例外にするという解決もありえると思います(「明らかに停止しない」が本当に正しいかどうか自信が持てないところですが)。

うっかり `(1..nil)` を作ってしまったというリアルな例などがあると、議論が捗りそうです。

----------------------------------------
Bug #14845: Endless Range with nil
https://bugs.ruby-lang.org/issues/14845#change-72478

* Author: igaiga (Kuniaki IGARASHI)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.6.0preview2
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
endless Rangeで次のケースで困ることがあります。

- 1..nilはendless Rangeになる
- endless Rangeはto_aすると返ってこなくなる
- 1..変数 のケースで意図せずendless Rangeになる可能性があり、そのときto_aすると返ってこなくなる

Ruby 2.5.1 では 1..nil はArgumentError (bad value for range) になります。

たとえば、 1..nil がendless Rangeではなくエラーになればこの問題は解決します。

### Info
- An endless range `(1..)` : https://bugs.ruby-lang.org/issues/12912
- twitter での話 : https://twitter.com/igaiga555/status/1006715631796813824



-- 
https://bugs.ruby-lang.org/