Here is a Scala function that generates a human-readable string from any type, recursive by parameter types:
https://gist.github.com/erikerlandson/78d8c33419055b98d701
import scala.reflect.runtime.universe._ object TypeString { // return a human-readable type string for type argument 'T' // typeString[Int] returns "Int" def typeString[T :TypeTag]: String = { def work(t: Type): String = { t match { case TypeRef(pre, sym, args) => val ss = sym.toString.stripPrefix("trait ").stripPrefix("class ").stripPrefix("type ") val as = args.map(work) if (ss.startsWith("Function")) { val arity = args.length - 1 "(" + (as.take(arity).mkString(",")) + ")" + "=>" + as.drop(arity).head } else { if (args.length <= 0) ss else (ss + "[" + as.mkString(",") + "]") } } } work(typeOf[T]) } // get the type string of an argument: // typeString(2) returns "Int" def typeString[T :TypeTag](x: T): String = typeString[T] }
eje Jan 23 '15 at 2:37 2015-01-23 14:37
source share