👋
[Feature #20664] Enumerator.produce に before:, until: 引数を追加する提案
[Feature #20664] Add before
and until
options to Enumerator.produce
-
Enumerator.produce
にbefore:
とuntil:
のオプション(キーワード引数)を追加する提案 -
before:
とuntil:
はどちらも『条件に当てはまるまでイテレーションを続ける』という挙動になるんですが以下のような違いがあります-
before:
: 条件に当てはまった値は含めない -
untile:
: 条件に当てはまった値は含める
-
# superclass が nil になるまでイテレーションを続ける
# その値は含めない
enum = Enumerator.produce(File, before: :nil?, &:superclass)
enum.to_a #=> [File, IO, Object, BasicObject]
# pred が 0 になるまでイテレーションを続ける
# その値を含める
enum = Enumerator.produce(3, until: :zero?, &:pred)
enum_to_a #=> [3, 2, 1, 0]
- 上記の場合だと
before: / untile:
には判定メソッド名を渡すような形になっているんですが、 テストをみているとProc
オブジェクトも渡せるみたいですね - これは [Feature #20625] Object#chain_of から派生したチケットになります
- 判定条件にメソッド名を渡せるようになっているんですが Ruby 的に Symbol をそのままメソッド的に扱うことはないのでちょっと違和感がありますねー
- Symbol をメソッドとして扱いたくない、みたいな話は昔聞いたことはある
- 今回みたいに 1つのメソッドに対して複数の条件を指定したい、みたいなのってむずかしいんですよねえ…
- 機能としてはあるといいと思うんですがどういい感じにかけるといいのかはむずい
Discussion