Ruby: Instanzvariable automatisch als Methodenargument setzen?

Gibt es Pläne, ein Ruby-Verhalten zu implementieren, das der CoffeeScript-Funktion zum Angeben eines Instanzvariablennamens in einer Methodenargumentliste ähnelt? Mögen

class User
  def initialize(@name, age)
    # @name is set implicitly, but @age isn't.
    # the local variable "age" will be set, just like it currently works.
  end
end

Mir ist diese Frage bewusst:Kann ich in Ruby Instanzvariablen in der Initialisierungsmethode automatisch auffüllen? , aber alle Lösungen (einschließlich meiner) scheinen nicht zur Philosophie der rubinroten Einfachheit zu passen.

Und gibt es Nachteile für dieses Verhalten?

AKTUALISIEREN

Einer der Gründe dafür ist die DRY-Philosophie (nicht wiederholen) der Ruby-Community. Oft muss ich den Namen einer Argumentvariablen wiederholen, weil ich möchte, dass sie der gleichnamigen Instanzvariablen zugewiesen wird.

def initialize(name)
  # not DRY
  @name = name
end

Ein Nachteil, den ich mir vorstellen kann, ist, dass es so aussehen kann, als ob eine Methode nichts tut, wenn sie keinen Körper hat. Wenn Sie schnell scannen, sieht dies möglicherweise wie ein No-Op aus. Aber ich denke, wenn wir Zeit haben, können wir uns anpassen.

Ein weiterer Nachteil: Wenn Sie andere Instanzvariablen im Body setzen und versuchen, lesbar zu sein, indem Sie alle Zuweisungen am Anfang setzen, kann es kognitiver sein, um zu sehen, dass die Zuweisungen auch in der Argumentliste vorkommen. Aber ich denke nicht, dass dies schwieriger ist, als beispielsweise einen Konstanten- oder Methodenaufruf zu sehen und zu seiner Definition springen zu müssen.

# notice: instance var assignments are happening in 2 places! 
def initialize(@name)
  @errors = []
end

Antworten auf die Frage(3)

Ihre Antwort auf die Frage