Wie ruft man eine generische Methode mit einem anonymen Typ auf, der Generika enthält?

9

Ich habe diesen Code, der funktioniert:

%Vor%

Aber ich würde es gerne so schreiben:

%Vor%

Dieser zweite kompiliert nicht:

kein impliziter Argument-Matching-Parametertyp (Foo [Int] {...}) = & gt; Foo [Nothing] wurde gefunden.

Grundsätzlich:

  • Ich möchte einen neuen anonymen erstellen Klasse / Instanz im laufenden Betrieb (z. B. neu Foo [Int] {...}) und gib es weiter eine "add" -Methode, die es hinzufügen wird eine Liste und dann zurückgeben
  • Der Schlüssel hier ist, dass die Variable von "val foo=" Ich möchte gerne sein -Typ als anonyme Klasse nicht Foo [Int], da es Methoden hinzufügt (someMethod in diesem Beispiel)

Irgendwelche Ideen?

Ich denke, das zweite scheitert, weil der Typ Int gelöscht wird. Ich kann den Compiler anscheinend so "andeuten": (Das funktioniert, scheint aber wie ein Hack)

%Vor%     
Alex Black 11.05.2010, 19:02
quelle

1 Antwort

1

Dario schlug vor, T in Foo kovariant zu machen:

%Vor%

Aber mit diesem fügt zu viele Einschränkungen zu Foo es scheint, z. Ich kann keine Var-Member-Variable vom Typ Option [T] haben.

kovarianter Typ T tritt in kontravarianter Position im Typ Option [T] des Parameters von Setter val =

auf     
Alex Black 11.05.2010, 19:39
quelle

Tags und Links