default benannte Argumente in Bezug auf andere Argumente in scala definieren

7

Ich habe eine Fallklasse, die drei gebundene Parameter speichert. Ich möchte Companion-Objekt, das die Klasse aus zwei beliebigen Parametern erstellen kann, etwas definieren, das wie das folgende Beispiel aussieht, das offensichtlich falsch ist:

%Vor%

Welche Tricks kann ich verwenden, um ähnliche Syntax zu erhalten?

    
ayvango 12.08.2013, 21:59
quelle

2 Antworten

26

Sie können type-classes verwenden:

%Vor%

Auf diese Weise ist es sogar typsicher und Sie können nicht so etwas wie:

nennen %Vor%

oder sogar

%Vor%     
gzm0 12.08.2013, 22:10
quelle
3

Nach ein bisschen Nachdenken bin ich mit einer anderen Lösung gekommen (ich behaupte nicht, dass es besser ist, würde nur gerne wissen, ob es überhaupt akzeptabel ist). Die Essenz besteht darin, eine Klasse zu definieren: %Code% und ein Begleitobjekt:

%Vor%

Sie können dann class Klass(val x: Int, val y: Int, val z: Int) eingeben und val k = Klass(x = 5, y = 6)() auf val k instance verweisen.

Und wegen der kleinen Codemenge kann man wahrscheinlich Makros definieren, um das zu machen, aber das ist ein bisschen schwierig für mich, aber es ist eine interessante Übung.

Aktualisieren

Nach einiger Zeit möchte ich Ihnen mitteilen, dass es in Ihrem Fall nur drei Kombinationen von Parametern gibt, also wäre es nicht einfacher, 3 Klass(5, 6, 11) -Methoden manuell zur Verfügung zu stellen? apply() sollte Ihre Bedürfnisse erfüllen. Und das wird Ihnen ein wenig Tipparbeit ersparen, denn bei anderen Ansätzen müssen Sie grundsätzlich auch alle diese Fälle codieren.

    
tkroman 13.08.2013 13:48
quelle

Tags und Links