🌊

[bugs.ruby][Feature #20202] エンドレスメソッド定義でメモ化できる構文を追加する提案

2024/03/20に公開

[Feature #20202] Memoized endless method definitions

  • エンドレスメソッド定義でメモ化できる構文を追加する提案
class Foo
  # def bar = (@bar ||= :memoized_value) と同じ処理になる
  def bar ||= :memoized_value
end
  • エンドレスメソッド定義で = を利用しているのでこういう書き方が自然に見えるんですかねー
  • エンドレスメソッド定義でメモ化したい事はまあまああるので便利そうには見えるんですがエンドレスメソッド定義の = は別に代入式ではないので @bar ||= obj と混同するのはよくない気はしますねえ
  • この提案は以下の理由で Reject されています
    • ユースケースが見当たらない
    • クラスのメソッドセットは一貫性/理解のしやすさのために安定しているべきである
    • 脆弱なメソッドセットは、オブジェクトの形状とメソッド・キャッシュに悪影響を及ぼす可能性がある
    • https://bugs.ruby-lang.org/issues/20202#note-4
GitHubで編集を提案

Discussion