【发布时间】:2014-12-22 01:01:47
【问题描述】:
在我们的库中,我们有一个这样定义的宏:
def extractNamed[A]: Any = macro NamedExtractSyntax.extractNamedImpl[A]
此宏使用其类型签名返回一个apply 方法,其参数与键入它的案例类的apply 方法相匹配。
我们的想法是,这允许我们库的用户使用 Scala 的命名参数,如下所示:
lazy val fruitExtractor = extractNamed[Fruit](
name = FruitTable.name,
juiciness = FruitTable.juiciness
)
但是,这似乎不起作用 - 它会在编译时返回 error: Any does not take parameters。
这似乎是由SI-7914 引起的,因为如果用户显式调用apply,它确实有效,即:
lazy val fruitExtractor = extractNamed[Fruit].apply(
name = FruitTable.name,
juiciness = FruitTable.juiciness
)
我们可以通过简单地将返回的方法重命名为合理的名称来解决这个问题,但是有没有其他方法可以解决这个问题而不需要显式的方法调用?
【问题讨论】:
标签: scala macros scala-macros