🦔
[Feature #20712] module 構文の戻り値を定義した module にする提案
[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 されてます
Discussion