如何打印scala类型?

时间:2016-02-15 01:21:00

标签: scala

我想向用户显示一个值,一个简化类型和原始类型。

我使用pprint库作为值,scala.Manifest表示类型。

def render[T](a: T)(implicit m: Manifest[T]): (String, String, String) =
  (pprint(a), simplify(m), m.toString)

我想实现这个simplify函数。

它会删除常见的导入

def simplify[T](m: Manifest[T]): String =
  m.toString
   .replaceAll("scala.", "")
   .replaceAll("scala.collection.immutable.", "")
   .replaceAll("scala.collection.mutable.", "")
   .replaceAll("java.lang.", "")

m.toString有以下缺点

  • desugars函数,(Int, Int) => Int变为scala.Function2[Int, Int, Int]
  • desugars元组,(Int, Int)变为scala.Tuple2[Int, Int]

1 个答案:

答案 0 :(得分:0)

类型漂亮的打印是在带有TPrint[T]

的ammonite-repl中实现的

libraryDependencies += "com.lihaoyi" % "ammonite-repl" % "0.5.4" cross CrossVersion.full

import ammonite.repl.frontend.TPrint
val config = pprint.Config.Defaults.PPrintConfig
def render[T](a: T)(implicit tp: TPrint[T], m: Manifest[T]): (String, String, String) =
  (pprint(a), tp.render(config), m.toString)