如果当前日期通过指定的FIXME(或TODO)日期,我创建了一个生成编译器警告(或错误)的简单宏。
Scala 2.10.4的宏实现(see here)使用了c.Expr[Any]
返回类型,在2.11.0中它是一个返回c.Tree
的白盒宏。
在任何一种情况下,分别返回c.Expr[Any](EmptyTree)
或EmptyTree
都会返回一个值。假设以下调用宏,
def hi() {
FIXME("2073/04/10: This will abort compilation if not fixed by 2073/04/10")
println("hi")
}
编译生成以下内容,
def hi(): Unit = {
(<empty>: scala.runtime.BoxedUnit);
scala.this.Predef.println("hi")
};
在宏呼叫站点。是否可以生成以下内容:
def hi(): Unit = {
scala.this.Predef.println("hi")
};
答案 0 :(得分:2)
您可以考虑将可修复块作为宏的参数:
def hi = FIXME("...") { println(...) }
比较编译器对elidable代码的作用:它除了“零”值,而不是空树。
https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/transform/UnCurry.scala#L515
您也可以考虑使用宏注释。