【发布时间】:2015-07-03 08:01:59
【问题描述】:
我正在编写一个宏 m(expr: String),其中 expr 是某种语言(不是 Scala)的表达式:
m("SOME EXPRESSION")
m("""
SOME EXPRESSION
""")
当我解析表达式时,我想在源文件中的正确位置报告错误消息。为了实现这一点,我应该知道字符串文字本身的位置以及文字的引号数量(3 或 1)。不幸的是,我没有找到任何返回文字引号数量的方法:
import scala.language.experimental.macros
import scala.reflect.macros.blackbox.Context
object Temp {
def m(s: String) : String = macro mImpl
def mImpl(context: Context)(s: context.Expr[String]): context.universe.Tree = {
import context.universe._
s match {
case l @ Literal(Constant(p: String)) =>
if (l.<TRIPLE QUOTES>) {
...
} else {
...
}
case _ =>
context.abort(context.enclosingPosition, "The argument of m must be a string literal")
}
}
}
我应该用什么代替<TRIPLE QUOTES>?
【问题讨论】:
-
您是否尝试过将
l与具有单引号的模式和具有三重引号的模式进行匹配?见:stackoverflow.com/questions/9770416/…