👋

[Feature #20664] Enumerator.produce に before:, until: 引数を追加する提案

2024/08/07に公開

[Feature #20664] Add before and until options to Enumerator.produce

  • Enumerator.producebefore: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つのメソッドに対して複数の条件を指定したい、みたいなのってむずかしいんですよねえ…
  • 機能としてはあるといいと思うんですがどういい感じにかけるといいのかはむずい
GitHubで編集を提案

Discussion