【发布时间】:2015-05-20 07:42:43
【问题描述】:
我是 scala 宏的新手,我花了几天时间尝试编写我的第一个宏。 我对 quasiquotes 连接有疑问。
有一个case子句的列表,假设如下:
val cases = cq"x => 1 " :: cq"_ => 0 " :: Nil
我需要从中构建一个部分函数。 问题是我不知道如何将它们粘贴到最终的准引用中。 文档说我应该这样做:
q"{ case ..$cases }"
但如果我这样做,它就不起作用。
有没有办法从这样的列表构建 PartialFunction?
感谢您的帮助。
【问题讨论】:
-
我相信这是正确的做法。你到底有什么错误?
-
另外你的模式有点奇怪
x => 1数学任何表达式,如果你引用一些名为x的本地值你应该使用`x` => 1作为模式 -
错误如下:宏扩展时出现异常:java.lang.IllegalArgumentException: scala.collection.immutable.List(case (x @ _) => 1, case _ => 0) is模式匹配案例的无效表示。
-
您使用的是 Scala 2.10 还是 2.11?
-
如果我这样写,它就可以工作: val case1 = cq"x => 1 " val case2 = cq"_ => 0 " val tree = q""" { case $case1 case $ case2 } """
标签: scala scala-macros scala-quasiquotes