Project

General

Profile

Bug #12002

**param notation seems to be creating a new hash in ruby 2.2.0

Added by chucke (Tiago Cardoso) almost 4 years ago. Updated almost 4 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:72904]

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.


Related issues

Related to Ruby master - Feature #10440: Optimize keyword and splat argumentClosed10/28/2014Actions

History

Updated by wanabe (_ wanabe) almost 4 years ago

r48239 did, according to git bisect.

#2

Updated by wanabe (_ wanabe) almost 4 years ago

  • Related to Feature #10440: Optimize keyword and splat argument added

Updated by nobu (Nobuyoshi Nakada) almost 4 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.

Also available in: Atom PDF