首页 > 解决方案 > 宏注释生成的伴随类的应用方法未解析

问题描述

我编写了一个宏注释处理器,它生成所有与声明案例类相同的方法,但提供散列约束。这有点棘手,但总的来说我对结果非常满意。但是,我看到围绕apply我尚未解决的方法的一些行为。

以前,当一个类Foo是案例类或具有手动定义的apply方法时,我可以编写类似foos.map(Foo). 但是,现在该方法是由宏处理器生成的,它会报错如下所示

type mismatch;
[error]  found   : Foo.type
[error]  required: String => ?

现在我可以将代码重写为foos.map(Foo.apply)orfoos.map(Foo(_))并且它会工作,但我无法辨别我生成的代码中会导致这种行为差异的任何差异。

我怀疑这是因为 Scala 编译器过于急切地将符号解析为类型名称而不是对象名称或类似名称,但如果有一种方法可以在这里做得更好,那就太好了。

标签: scalascala-macrosscala-macro-paradise

解决方案


正如@LuisMiguelMejíaSuárez 和@DmytroMitin 所指出的,我的严重疏忽是(大多数)案例类伴随对象继承自一个FunctionN类。将其添加到新的或现有的伴随对象的父对象可以解决问题。


推荐阅读