Scala:代码仅在调试时运行(#ifdef等效?)
发布时间:2020-12-16 18:43:51 所属栏目:安全 来源:网络整理
导读:在C中我可以写: #ifdef DEBUGcout "Debugging!" endl; Scala中有没有相应的东西? 解决方法 C preprocesser #ifdef的等效形式是Scala宏: package app.macros.logimport scala.language.experimental.macrosimport reflect.macros.Contextobject SimpleMacr
在C中我可以写:
#ifdef DEBUG cout << "Debugging!" << endl; Scala中有没有相应的东西? 解决方法
C preprocesser #ifdef的等效形式是Scala宏:
package app.macros.log import scala.language.experimental.macros import reflect.macros.Context object SimpleMacroLogger { private val on = true def info(msg: String): Unit = macro info_impl def info_impl(c: Context)(msg: c.Expr[String]): c.Expr[Unit] = { import c.universe._ if (on) { reify { println(msg.splice) } } else { reify { // Nothing } } } } 与…一起使用 import app.macros.log.{SimpleMacroLogger => log} object SimpleMacroLoggerDemo extends App { log.info("Hello") } 代码要复杂得多,但它的用法更优越:不需要周围的#ifdef / #endif等.所以它不会使你的代码混乱. 如果设置为false,则宏将完全删除日志记录. reify中的任何内容都将进入生成的字节代码,其他代码在编译时运行.这特别适用于if(on)…. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |