scala宏:本地扩展?

Ben*_*man 5 macros scala scala-macros

scala 2.11宏可以强制其参数的宏扩展吗?

这是我的用例:我从文档开始使用printf宏,然后创建自己的宏来连接字符串.

def mconcat(s1: String, s2: String, s3: String): String = macro mconcat_impl
def mconcat_impl(c: Context)(s1: c.Expr[String], s2: c.Expr[String], s3: c.Expr[String]): c.Expr[String] = {
  import c.universe._
  c.Expr[String](q"""$s1.concat($s2.concat($s3))""")
}
Run Code Online (Sandbox Code Playgroud)

我希望结合这两个宏,

mprintf(mconcat("what", "a", "burger"))
Run Code Online (Sandbox Code Playgroud)

但宏扩展中出现匹配错误.

编辑

感谢Travis Brown指出mconcat不会扩展为字符串文字.对于那个很抱歉!但是如果我们简化以下内容仍然存在问题mconcat:

c.Expr[String](q"""$s1""")
Run Code Online (Sandbox Code Playgroud)

或者

s1
Run Code Online (Sandbox Code Playgroud)

甚至到

c.Expr[String](Literal(Constant("what")))
Run Code Online (Sandbox Code Playgroud)

这三个都给出了相同的错误消息:

Test.scala:8: error: exception during macro expansion:
  scala.MatchError: ("what": String) (of class scala.reflect.internal.Trees$Typed)
at Printf$.printf_impl(Printf.scala:23)

  mprintf(mconcat("what", "a", "burger"))
         ^
one error found
Run Code Online (Sandbox Code Playgroud)