📘
[Feature #21701] Enumerator.produce で size を設定できるようにする提案
[Feature #21701] Enumerator.produce accepts an optional size keyword argument
-
Enumerator.produceでsizeを設定できるようにする提案 -
Enumerator#sizeは現状だと常にFloat::INFINITYを返すようになっている
enum = Enumerator.produce(1000, &:succ)
p enum.size # => Float::INFINITY
- これを
Enumerator.produce(1000, size: 3, &:succ)のようにsize:キーワード引数で制御したいという内容 - PR が出されており、この PR だと以下のような挙動になる
enum = Enumerator.produce(1000, size: 3, &:succ)
p enum.size # => 3
- またこれは
size:にprocを渡して制御できる
enum = Enumerator.produce(1000, size: -> { 5 }, &:succ)
p enum.size # => 5
- 更に
size:キーワード非キスがない場合はnilを返すようになる
enum = Enumerator.produce(1000, &:succ)
p enum.size # => 5
- 個人的には
Enumerator.produceで有限よりも無限を設定するほうが多いのであんまりsize:を設定するモチベーションはないんですよねえ- なので意図的に
sizeを使用したいケースも思いつかない
- なので意図的に
- これを提案するモチベーションとしては
#to_setが無限のenumeratorに対してエラーになるようになったのでそれに対応したい、という点みたい - また、あと大きな変更として『
#sizeの戻り値がFloat::INFINITYからnilになる』という非互換な変更のデメリットが圧倒的に大きい印象がある- 単純に
#sizeがnilを返すことを許容してコードは書きたくない…
- 単純に
-
size:を指定できるようにすること自体はまあユースケースがあるならいいんですがnilを返すのはやめてほしいですねえ……
Discussion