Feature #12746


class Array: alias .prepend to .unshift ?

Added by shevegen (Robert A. Heiler) about 5 years ago. Updated over 4 years ago.

Target version:


This code works:

array = %w( b c )  # => ["b", "c"]
array.unshift "a"
array              # => ["a", "b", "c"]

I would like for .prepend to also work on class Array.


I found myself to sometimes .prepend to a String object
in Ruby, which works very well.

Sometimes I do not want to care whether I have a String
or an Array, I just want to prepend stuff (add to the

I can do so via .unshift, fair enough, and I also can
use [] such as:

array[0,0] = 'a'

Which works on both class String and Array.

Since class Hash is sorted (kept in order) these days,
perhaps they can also use a .prepend variant, which
either works for prepending both a key-value pair,
or optionally, to make the value default to nil and
just provide a key (if the user does not need to
specify a specific value) such as:

hash.prepend :cat
hash.prepend cat: :Tom

But primarily, I only ask for class Array since I
have had use cases for class Array; I did not yet
have a similar use case for class Hash.

Feel free to close this if it is considered unwanted
for any reason!

Updated by nrodriguez (Nicolas Rodriguez) about 5 years ago

Also .prepend sounds more natural than .unshift (specialy on Array). But it also implies .append which should be aliased to .push.

Example :

[1, 2, 3,].append(4).append(5)

Updated by JustJosh (Joshua Stowers) over 4 years ago

Thanks, Matz! I've been wanting this for a while.
I've just made a PR to the Github repo with the changes:

Actions #5

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

  • Status changed from Open to Closed

Applied in changeset trunk|r58227.

array.c: Array#append and Array#prepend

  • array.c (Init_Array): Add alias "append" to Array#push, and "prepend" to Array#unshift. [Feature #12746] [Fix GH-1574]

Author: pascbjumper2


Also available in: Atom PDF