🎃

[bugs.ruby][Feature #20300] Hash の更新と更新前の値を取得するメソッドを追加する提案

2024/03/06に公開

[Feature #20300] Hash: set value and get pre-existing value in one call

  • 『Hash を更新しつつ、更新前の値を取得する』場合に以下のように同じ要素に対して2回参照する必要がある
h = { k: "old value" }

# 1. :k を参照して更新前の値を取得する
old_value = h[:k]
# 2. もう一度 :k を参照して更新を行う
h[:k] = "new value"

use(old_value)
  • このときに Symbol 以外でアクセスした場合に #hash#eql? を呼び出すコストがかかる
  • なのでこれをまとめて操作する Hash#update_value を追加する提案
  • Ruby だと以下のような感じ
    • 実際には参照を1回にするために C で実装する必要がある
class Hash
  def update_value(key, new_value)
    old_value = self[key]
    self[key] = new_value
    old_value
  end
end
GitHubで編集を提案

Discussion