Actions
Bug #9898
closedKeyword argument oddities
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
Backport:
Description
Case 1: If a method takes a single argument, and the method is called with a keyword splat, the method receives the passed object, not the result of calling #to_hash
on the object:
# kw1.rb
def m(a) a end
o = Object.new
def o.to_hash() puts "to_hash"; { a: 1 } end
p m(**o)
$ ruby -v kw1.rb
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
to_hash
#<Object:0x007fdee188ab90>
Would someone please explain why the result of #to_hash
in not passed to the method?
Case 2: If the method takes a keyword argument, #to_hash
is called at the send site and at the receiver:
# kw2.rb
def mk(a:) a end
o = Object.new
def o.to_hash() puts "to_hash"; { a: 1 } end
p mk(**o)
$ ruby -v kw2.rb
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
to_hash
to_hash
1
Would someone please explain why #to_hash
is called at both the send site and at the receiver?
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Description updated (diff)
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: DONTNEED, 2.1: REQUIRED
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
Applied in changeset r46342.
vm.c: return the result hash
- vm.c (core_hash_merge_kwd): should return the result hash, which
may be converted from and differ from the given argument.
[ruby-core:62921] [Bug #9898]
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Has duplicate Bug #9954: Unexpected Hash Modification and Segmentation Fault with Named Arguments added
Updated by nagachika (Tomoyuki Chikanaga) over 10 years ago
- Backport changed from 2.0.0: DONTNEED, 2.1: REQUIRED to 2.0.0: DONTNEED, 2.1: DONE
Backported into ruby_2_1
at r46619.
Updated by hsbt (Hiroshi SHIBATA) about 7 years ago
- Related to Feature #14183: "Real" keyword argument added
Actions
Like0
Like0Like0Like0Like0Like0