Metaprogrammatisch Ruby-Methoden definieren, die Schlüsselwortargumente verwenden?

8

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:

%Vor%

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:

  • es erfordert Schlüsselwortargumente ohne Standardwert;
  • Die Schlüsselwörter werden als ein Array von Symbolen in attributes ; und
  • Die Methode initialize weist sie gleichnamigen Instanzvariablen zu
  • zu
John Feminella 24.10.2014, 18:16
quelle

4 Antworten

6

Ich habe eine (überraschend Pythonic) **kwargs Strategie gewählt, dank der neuen Funktionen in Ruby 2.0 +:

%Vor%     
John Feminella 24.10.2014, 19:37
quelle
1

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.

    
engineersmnky 24.10.2014 19:20
quelle
0

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!

    
the Tin Man 24.10.2014 19:44
quelle
0

Ich war auch auf der Jagd nach diesem und stolperte über dieses Juwel, das genau das tut:

Ссылка

%Vor%

statt

%Vor%     
Sam Stickland 07.06.2016 10:54
quelle

Tags und Links