Shorter syntax for assigning a method argument to an instance variable
class Person def initialize(name:) @name = name @age = 0 end end
is so common, that Cristal Programming Language has a shortcut for it:
class Person def initialize(@name : String) @age = 0 end end
This is a feature request to implement the same style to Ruby syntax, supporting both isolated parameters and Hash style parameters. Eg:
class Person attr_reader :name, :age def initialize(@name, @age:) end end fabio = Person.new("Fabio", age: 34) fabio.name #=> "Fabio" fabio.age #=> 34
This will be very useful in methods that accept a lot of parameters and certainly will avoid bugs due to decreased duplicated code (eg: addind a new parameter to a method, and forgetting to set the instance variable to it). Other than implementing support for the syntax itself, I believe RDoc would also have to be updated, not to expose the "@" on documentation (as it is not relevant there).
What do you think?
Updated by phluid61 (Matthew Kerwin) about 3 years ago
Updated by matz (Yukihiro Matsumoto) about 2 years ago
- Status changed from Open to Rejected
My opinion has not been changed from https://bugs.ruby-lang.org/issues/8563#note-3
I am strongly against code like
def initialize(@foo, @bar) end
I don't care about
define_attr_initialize not being "the solution".