⛳
[Feature #15381] **obj のときに暗黙的に obj.to_h を呼び出すようにする提案
[Feature #15381] Let double splat call to_h implicitly
-
**objのときに暗黙的にobj.to_hを呼び出すようにする提案 - 現状だと
**objのときにはobj.to_hashが内部で呼び出されます
class X
# ** でこれが呼び出される
def to_hash
{ a: 1 }
end
end
p **X.new
# => {:a=>1}
- これを
#to_hashではなくて#to_hの呼び出しにする提案 -
*objだとobj.to_aを呼び出すのでちょっとややこしいんですよね、これ
class X
# * でこれが呼び出される
def to_a
[1, 2]
end
end
p *X.new
# => [1, 2]
- 6年前のチケットなんですが最近話題になってました
- チケットの内容よりも
#to_a, to_hと#to_ary, to_hashの責務の話などが議論されてて読んでて面白かったです-
#to_aは『〜に変換可能』という意味で#to_aryは『〜と同一である』みたいな話とか
-
- どこまでを明示的に扱って、どこまでを暗黙的に扱うのかは悩ましい部分ではありますねえ
- あと面白い提案としては
**@を追加する提案もありました- https://bugs.ruby-lang.org/issues/15381#note-11
- これだといろいろと汎用性が広がりそうですねー
Discussion