Feature #12820
closedShorter syntax for assigning a method argument to an instance variable
Description
Hello,
The pattern:
class Person
def initialize(name:)
@name = name
@age = 0
end
end
is so common, that Cristal Programming Language has a shortcut for it:
https://crystal-lang.org/docs/syntax_and_semantics/methods_and_instance_variables.html
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?
Thank you.
Updated by phluid61 (Matthew Kerwin) about 8 years ago
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Is duplicate of Feature #5825: Sweet instance var assignment in the object initializer added
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Is duplicate of Feature #8563: Instance variable arguments added
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Is duplicate of Feature #12023: Allow ivars to be used as method arguments added
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Is duplicate of Feature #12578: Instance Variables Assigned In parameters ( ala Crystal? ) added
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Description updated (diff)
Matthew Kerwin wrote:
Is this now the most-duplicated feature request in Ruby?
By crystal?
Updated by matz (Yukihiro Matsumoto) almost 7 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".
Matz.
Updated by matz (Yukihiro Matsumoto) about 6 years ago
- Related to Feature #15192: Introduce a new "shortcut assigning" syntax to convenient setup instance variables added