/ / So lösen Sie die Infix-Typ-Anzeige in REPL aus - scala, read-eval-print-loop

So lösen Sie die Infixanzeige in REPL aus - scala, read-eval-print-loop

Wenn ich meinen eigenen Typ mit zwei Argumenten erstelle:

class !:[A, B]

Wenn Sie dann in REPL eine Instanz davon erstellen, wird der Typ nicht so angezeigt, wie ich es möchte:

scala> new !:[Int, Int]
res18: !:[Int,Int] = $bang$colon@5eb1479

Stattdessen möchte ich, dass es so angezeigt wird:

scala> new !:[Int, Int]
res18: Int !: Int = $bang$colon@5eb1479

Ist das in Scala möglich?

Antworten:

1 für die Antwort № 1

Die Infix-Anzeige für symbolische Typen ist in Scala 2.12.2 voreingestellt. Die Änderung wurde in vorgenommen diese Pull-Anfrage.

Außerdem wurde eine Anmerkung hinzugefügt showAsInfix im Paket scala.annotation um Ihnen die Kontrolle in Fällen zu geben, in denen Sie das Standardverhalten ändern müssen.


0 für die Antwort № 2

Nicht sicher, ob dies hilft, aber Sie könnten die toString-Methode überschreiben und den zweiten Teil der Ausgabe wie folgt steuern:

import scala.reflect.runtime.universe.{TypeTag, typeOf}

class A[X, Y] (implicit val tt: TypeTag[X], implicit val ty: TypeTag[Y]) {
override def toString() = typeOf[X] + " !: " + typeOf[Y]
}
new A[Int, Int]()

Ausgänge

res15: A[Int,Int] = Int !: Int