scala - 编译时类型跟踪

标签 scala metaprogramming

是否可以在 Scala 表达式周围添加一些魔法构造,以便在编译期间打印类型?例如。有一些类、魔术函数、元编程类型,它可以:

val i = 1
Some(11).map(Trace(_ + 1))

// compile
// prints: Int

最佳答案

不完全是,但是这个怎么样

$ cat Test.scala
def Trace[T] = identity[T] _

val i = 1
Some(11) map {x => Trace(x + 1)}



$ scala -Xprint:typer Test.scala 2>&1 | egrep --o 'Trace\[.*\]'
Trace[T >: Nothing <: Any]
Trace[Int]

第一个 Trace 来自 Trace 的定义,可以忽略。相同的参数 (-Xprint:typer) 也适用于 scalac。

关于scala - 编译时类型跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992456/

相关文章:

c++ - 为什么这个简短的模板代码片段有效?

ruby - 将数组分配给不同的变量

scala - 我如何在 SBT 中使用 spaceDelimted 解析器?

scala - 如何指定多个类的宏注解扩展顺序?

scala - 在 Scala 中从数据框中添加两列

c++ - 根据参数化原语查找元组中的第一个元素

groovy - 如何使用 Groovy 拦截 Java 应用程序中所有方法的执行?

scala - 如何将 spark 数据集转换为 scala seq

scala - HashPartitioner 是如何工作的?

ruby-on-rails - 将模块/类中的代码注入(inject)到另一个模块/类中