加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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)….

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读