Issue #5825 has been updated by Tyler Rick.


I would *love* to see this feature in Ruby.  Assigning an argument to an instance variable in a constructor is something that we do in *almost every constructor we write*, so I think this should be made as easy and simple as possible, by adding a little syntactic sugar to the language.

I shouldn't have to repeat myself and type out each argument name ***3 times*** in every constructor I write, for something as mundane as this:

    def initialize(name, กฤ)
      @name = name
      กฤ
    end

This constant repetition feels inelegant to me and goes against one of the Ruby community's most fundamental values (Don't Repeat Yourself).

This method could be simplified to simply this:

    def initialize(@name, กฤ)
    end

I think CoffeeScript solved this problem quite nicely.  Many constructors in CoffeeScript end up being beautiful, simple one-liners!

    constructor: (@name) ->

And with the rising popularity of CoffeeScript, there are going to be more and more Rubyists not only *wishing* for this but also ***expecting*** thissame feature to exist in Ruby as well.  :)

----

Here are a few more "votes" for this feature:
* http://stackoverflow.com/questions/10856191/ruby-automatically-set-instance-variable-as-method-argument
* http://stackoverflow.com/questions/9597249/in-ruby-can-i-automatically-populate-instance-variables-somehow-in-the-initializ/10855962
* http://stackoverflow.com/questions/16072965/why-do-method-arguments-not-work-for-assignment

Plus various attempts at removing the duplication from assign variables in constructors, using only pure Ruby:
* http://redsquirrel.com/cgi-bin/dave/dynamic/def_init.html (`def_init :arg1, :arg2`)
* http://blog.jayfields.com/2007/04/ruby-assigning-instance-variables-in.html (`initializer :arg1, :arg2`)
* https://github.com/rubyworks/facets/blob/master/lib/core/facets/kernel/assign.rb (`assign(hash)`)
* https://github.com/sheldonh/magic_options (`magic_initialize` and `magic_options(hash)`)
(But pure Ruby solutions can only go so far, and none of those solutions really solve the problem nicely enough...)

----------------------------------------
Feature #5825: Sweet instance var assignment in the object initializer
https://bugs.ruby-lang.org/issues/5825#change-45766

* Author: Gosha Arinich
* Status: Assigned
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Category: syntax
* Target version: Next Major
----------------------------------------
=begin
I'm very excited about this feature in CoffeeScript, and think it might be a nice-to-have thing in Ruby 2.0.

That's how I think it would look like:

 class Me
   def initialize(@name, @age, @location); end
 end

So we can declare ((|@variable|))s in the initializer method parameters definition to avoid assigning instance variables from method arguments by hand, like:

 class Me
   def initialize(name, age, location)
     @name = name
     @age = age
     @location = location
   end
 end

Want to hear what do you guys think, does that feature worth being includedin 2.0?
=end



-- 
http://bugs.ruby-lang.org/