Geben Sie Aliasing einer Fallklasse in Scala 2.10 ein

7

Ich benutze Scala 2.10.2 und habe zwei Fallklassen, die identische Felder haben:

%Vor%

Ich würde gerne so etwas tun:

%Vor%

Das kompiliert, aber wenn ich versuche, ein Foo zu erstellen, bekomme ich:

%Vor%

Funktioniert Typ-Aliasing nicht mit Fallklassen?

    
Josh Glover 17.02.2014, 14:21
quelle

4 Antworten

12

Beim Erstellen einer Fallklasse erstellt Scala automatisch ein Begleitobjekt. In Ihrem Code definieren Sie einen Alias ​​für den Typ Thing , also nur für die Klasse Thing . Ihr Begleitobjekt Thing hat immer noch nur 1 Namen und keine Aliase.

Eine Möglichkeit zum "Reparieren" besteht darin, einen Verweis auf das Companion-Objekt (kein Typ-Alias) wie folgt zu erstellen:

%Vor%

Eine andere Möglichkeit, das Problem zu beheben, wäre, das importierte Objekt mit import package.{Thing => Bar} umzubenennen.

    
yǝsʞǝlA 17.02.2014, 14:30
quelle
4
%Vor%

Wenn Sie new Bar("a","b") sagen, wird es funktionieren

    
Ion Cojocaru 17.02.2014 14:35
quelle
4

Geben Sie Aliase nur Alias ​​den Typ, nicht irgendein Companion-Objekt, das Factory-Methoden liefern könnte (ob Sie diese Factory-Methode selbst schreiben oder eine "kostenlos" vom Compiler erhalten).

Andererseits wirkt sich der Import auf Namen aus, und wenn mehrere Entitäten mit einem bestimmten Namen verknüpft sind, bringt das Importieren dieses Namens jeden Referenten des importierten Namens mit sich. Außerdem können Sie beim Importieren umbenennen und Sie können dies multiplizieren, also ...

%Vor%

Es ist jedoch nicht gut für das Rendering über toString , wie Sie sehen können.

    
Randall Schulz 17.02.2014 15:52
quelle
0

Soll Foo und Bar unterscheidbar sein (wie wenn es sich um verschiedene Fallklassen handelt) oder nicht? Wenn ja, und Sie wollen nur vermeiden, Liste der Felder zu wiederholen, können Sie dies tun:

%Vor%

Aber das macht sie offensichtlich etwas unpraktischer in Musterabgleich- oder Zugriffsfeldern. Der Feldzugriff kann ein wenig verbessert werden:

%Vor%     
Alexey Romanov 18.02.2014 10:40
quelle

Tags und Links