Actions
Bug #12002
closed**param notation seems to be creating a new hash in ruby 2.2.0
Description
I found the regression regarding the handling of the **
notation for options hash in a method. In ruby 2.1 and lower, it seems to always be handled in the same way, i.e. it is always the same object:
def hashie1(o={})
puts o.object_id
end
def hashie2(**o)
puts o.object_id
end
v={}
puts v.object_id
hashie1(v)
hashie2(v)
# 2.0.0
69830362391800
69830362391800
69830362391800
# 2.1.6
69884363736320
69884363736320
69884363736320
# 2.2.4
69922787909840
69922787909840
69922787909700
# 2.3.0
69915134419200
69915134419200
69915134419000
I didn't find any documentation regarding this change. Is it supposed to work the way it works in 2.2 and 2.3? Because my understanding was that **
was supposed to be the new notation and should just work as the previous notation.
Updated by wanabe (_ wanabe) almost 9 years ago
r48239 did, according to git bisect
.
Updated by wanabe (_ wanabe) almost 9 years ago
- Related to Feature #10440: Optimize keyword and splat argument added
Updated by nobu (Nobuyoshi Nakada) almost 9 years ago
- Description updated (diff)
- Status changed from Open to Rejected
It is not a bug.
As *rest
, modifying o
should not affect the object in the caller scope.
Actions
Like0
Like0Like0Like0