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)
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |