“对于宏调用太少参数列表”(“too few argument lists for macro in

2019-10-22 21:29发布

考虑下面的代码:

case class JetDim(dimension: Int) {
  require(dimension > 0)
}

object JetDim {
  def build(dimension: Int): Int = macro JetDimMacro.apply
}

和宏调用:

def apply(dimension: Int): Int = macro applyImpl

def applyImpl(c: Context)(dimension: c.Expr[Int]): c.Expr[Int] = ...

我得到这个编译时错误:

[error]  too few argument lists for macro invocation
[error]  def build(dimension: Int): Int = macro JetDimMacro.apply

为什么?

Answer 1:

macro关键字采用的是应该有一个方法Context参数作为第一个参数列表(再然而,许多Expr争论在随后的列表)。 在JetDim你给macro本身有一个宏观的实现方法。 这仅仅是不合法的语法,你不能“鸟巢” macro这样。 你需要要么调用JetDimMacro.apply直接(作为正常的方法调用) JetDim.build ,或使用macro JetDimMacro.applyImpl (这是很可能你想要的)。



文章来源: “too few argument lists for macro invocation”