如何在REPL中触发中缀类型显示

时间:2017-07-18 10:57:57

标签: scala read-eval-print-loop

如果我用两个参数创建自己的类型:

class !:[A, B]

然后在REPL中创建它的实例不会按我想要的方式显示它的类型:

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

相反,我希望它显示如下:

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

这是否可以在scala中使用?

2 个答案:

答案 0 :(得分:1)

符号类型的中缀显示在Scala 2.12.2中是默认的。更改是在this pull request中进行的。

它还在包showAsInfix中添加了注释scala.annotation,以便在需要更改默认行为的情况下为您提供控制。

答案 1 :(得分:0)

不确定这是否有帮助,但您可以覆盖toString方法并控制输出的第二部分,如下所示:

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]()

输出

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