Project

General

Profile

Actions

Feature #5735

closed

Extending the use of splat operator to when it is inside a hash

Added by sawa (Tsuyoshi Sawada) over 12 years ago. Updated almost 5 years ago.

Status:
Closed
Target version:
-
[ruby-dev:44962]

Description

Ruby convention of allowing omittion of the curly brackets for the last argument is convenient:

foo(arg1, arg2, 1 => :a, 2 => :b)

Sometimes, I want to pass a hash with some modifications. For example, suppose h = {3 => :c, 4 => :d, 5 => :e} is a hash already defined and that I want to add some key-value pairs as well as overwrite some values of h, such as {3 => :c, 4 => :f, 5 => :e, 6 => :g}, and pass that. The current convention only allows:

foo(arg1, arg2, h.merge(4 => :f, 6 => :g))

but it would be more convenient if a hash preceded by the splat operator is placed in a hash, it is interpreted as part of the hash, allowing notations like:

foo(arg1, arg2, *h, 4 => :f, 6 => :g)

or, if I want to overwrite the hash {4 => :f, 6 => :g} with h, then:

foo(arg1, arg2, 4 => :f, 6 => :g, *h)

Or besides the argument position, in general, usages like the following:

{3 => :h, *h, 4 => :f, 6 => :g}

This is an analogy from the splat operator used within an array:

[1, 2, *[4, 5, 6], 7, 8]

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0