🦔

[Feature #20712] module 構文の戻り値を定義した module にする提案

2024/09/03に公開

[Feature #20712] module should return newly defined module

  • module の構文の戻り値を『その module のオブジェクトを返すようにする』提案
# 以下のように自身を返すようにする
module M
end
# 現状 => nil
# 提案 => M
  • モチベーションとしては module の定義 + using を一緒に行う際に効率がよい、という点ですね
# 現状だと1度モジュールを定義したり Module.new したりする必要がある
using(Module.new {
  refine String do
    # ...
  end
})

module ArrayEx
  refine Array do
    # ...
  end
end
using ArrayEx
  • これなんですが起票者は『module は nil を返すので module に返すようにする』という認識だったんですが実際には module は『最後に書いた式の結果』を返すようになっています
result = module M
  # この結果を返す
  1 + 2
end

pp result # => 3
  • なので次のように self を最後に返すことで元々やりたかったことも実現できます
using(module M
  refine Array do
    def hoge = "hoge"
  end

  # 最後に self を返す
  self
end
)

pp [].hoge # => "hoge"
  • と、いうことでこのチケットは close されてます
GitHubで編集を提案

Discussion