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 № 1Die 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