folgende AST für Success
und Failure
Gegeben:Erzwinge Typ Signaturen für Links und Rechts
sealed trait Success
case object FooGood extends Success
case object BarGood extends Success
sealed trait Failure
case object FooBad extends Failure
case object BarBad extends Failure
Und die Methode Unterschrift:
def go[A <: Failure, B <: Success](x: Int): Either[A, B] = ???
Allerdings würde Ich mag die Left
und Right
beschränken Spezifische Typen für Foo
oder Bar
.
Aber die folgenden Code kompiliert (gegen meinen Willen):
scala> go[FooBad.type, BarGood.type](5)
scala.NotImplementedError: an implementation is missing
Wie kann ich diese Einschränkung bei der Kompilierung-Zeit erreichen?
Warum nicht Charakterzug Foo und Bar verwendet wird, mit dieser Definition: def go [F] (x: Int): Entweder [Failure mit F, Erfolg mit F] = ??? – volia17
Ich stimme zu, dass es kompilieren sollte. Ich behauptete nicht, dass es ** nicht ** kompilieren sollte. Meine Frage ist, wie man eine "Go" -Implementierung (auf generische Weise) schreibt, die nicht kompiliert werden kann, wenn nicht auf beiden Seiten ein "Balken" erscheint, dh "rechts" und "links" oder umgekehrt Foo. –