我有一个宏,我想用它来记录执行一个可能返回一些有用的块的时间。所以,如果我有类似的东西
if ($createdEvent) {
echo 'Success';
} else {
echo 'Error';
}
我将更改为val y = f(x)
以获取在日志中执行该功能所花费的时间。
我几乎拥有我想要的东西,但是当使用新的术语名称来避免名称冲突时,例如在t0和t1之间,我收到错误:
val y = Timed(f(x))
如何让那些freshQuermNames使用quasiquotes?
Error:(22, 15) Can't unquote reflect.runtime.universe.TermName, consider providing an implicit instance of Liftable[reflect.runtime.universe.TermName]
val $kk = System.nanoTime()
^
答案 0 :(得分:0)
你不想要一个TermName
,你想要一个Ident
:
val kk = Ident(TermName("kk"))
但是如果标识符的名称是常量,那么当你刚刚写完时,没有理由甚至构造这样的标识符:
q"""
val kk = System.nanoTime
...
"""
更改它将解决该问题,但还有其他问题。在quasiquotes中未定义t0
,并且您定义的所有其他术语名称实际上都没有。
我不明白为什么你需要一个宏,当正常的方法完成工作时。宏将增加代码的大小(如果您经常使用它,则会显着增加)。