Struct
lässt mich eine neue Klasse erstellen, die Argumente akzeptiert und eine nette Semantik hat. Die Argumente sind jedoch nicht erforderlich, und ihre Reihenfolge erfordert die folgende Definition:
Ich möchte etwas ähnlich wie ein Struct, aber stattdessen verwendet Schlüsselwort Argumente:
%Vor%Das könnte etwa so aussehen:
%Vor% Aber was sollte in den Klammern gehen, um eine initialize
-Methode für klass
zu definieren, so dass:
attributes
; und initialize
weist sie gleichnamigen Instanzvariablen zu Ich habe eine (überraschend Pythonic) **kwargs
Strategie gewählt, dank der neuen Funktionen in Ruby 2.0 +:
Ich könnte die Frage falsch verstehen, aber suchst du nach so etwas?
%Vor%Dann
%Vor% Wenn Sie etwas mehr wollen, erklären Sie bitte, wie ich denke, dass dies Ihren Kriterien entspricht, zumindest mein Verständnis davon. Wie es die Methoden definiert und kann ein "Schlüsselwort" ( Hash
) -Argument nehmen und die richtigen Instanzvariablen zuweisen.
Wenn Sie möchten, dass die Argumente in derselben Reihenfolge wie sie definiert sind, entfernen Sie einfach die Sortierungen.
Auch könnte es sauberere Implementierungen geben.
Es klingt, als ob Sie nach Ruby's eingebautem OpenStruct suchen :
%Vor%Ich denke an OpenStruct als Candy-Coating auf einem Hash, wo wir auf die Instanz ohne reale Einschränkungen zugreifen und sie zuweisen können, im Gegensatz zu einer echten Klasse mit den normalen Accessoren. Wir können so tun, als wäre es ein Hash oder eine Klasse mit Methoden. Es ist ein Nachtisch, nein, es ist ein Bodenwachs, nein, es sind zwei Dinge in einem!
Ich war auch auf der Jagd nach diesem und stolperte über dieses Juwel, das genau das tut:
%Vor%statt
%Vor%Tags und Links ruby metaprogramming