From: redmine.ruby-lang.org@... Date: 2014-03-13T19:10:12+00:00 Subject: [ruby-core:61475] [ruby-trunk - Feature #5825] Sweet instance var assignment in the object initializer 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*** this same 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 included in 2.0? =end -- http://bugs.ruby-lang.org/