🦁

[Feature #21615] 自身と同じ配列を返す `Array#values` を追加する提案

に公開

[Feature #21615] Introduce Array#values

  • 自身と同じ配列を返す Array#values を追加する提案
  • モチベーションとしては HashArray を区別せずにダックタイピングで #values を呼び出せるようにしたいみたいですね
  • 以下のように #reponse_to? で処理を切り分けるのを
def normalize_records(input)
    items = input.respond_to?(:values) ? input.values : input

    items.each do |item|
do_stuff_with_item(item)
    end
    end
  • 以下のように #values で呼び出せるようにしたいみたい
def normalize_records(input)
  input.values.each do |item|
    do_stuff_with_item(item)
  end
end
  • ちょっと違うんですが #values_atHash でも Array でも定義されているのでそれと合わせたい、みたなのもモチベーションとして書いてある
    • それぞれ添字アクセスしたときと同じ値を返すようなメソッド
hash = { a: 1, b: 2, c: 3 }
pp hash.values_at(:a, :c) # => [1, 3]

ary = %w(homu mami mado)
pp ary.values_at(0, 2) # => ["homu", "mado"]
  • これ系はどこまでダックタイピングとして使いたいのかが難しそうですね
  • コメントにも Set#values も追加する話とかがでています
  • Enumerable#values を追加しちゃったほうがいろいろと手っ取り早い気もするけどそこまでは話し広げ過ぎな気もするしなあ
GitHubで編集を提案

Discussion