"too few argument lists for macro invocation"
"too few argument lists for macro invocation"
给定以下代码:
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
为什么?
macro
关键字采用的方法应该有一个 Context
参数作为其第一个参数列表(然后在后续列表中有许多 Expr
个参数)。在 JetDim
中,您给 macro
一个本身具有宏实现的方法。这只是无效的语法——您不能像这样 "nest" macro
。您需要在 JetDim.build
中直接调用 JetDimMacro.apply
(作为普通方法调用),或者使用 macro JetDimMacro.applyImpl
(这更有可能是您想要的)。
给定以下代码:
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
为什么?
macro
关键字采用的方法应该有一个 Context
参数作为其第一个参数列表(然后在后续列表中有许多 Expr
个参数)。在 JetDim
中,您给 macro
一个本身具有宏实现的方法。这只是无效的语法——您不能像这样 "nest" macro
。您需要在 JetDim.build
中直接调用 JetDimMacro.apply
(作为普通方法调用),或者使用 macro JetDimMacro.applyImpl
(这更有可能是您想要的)。