我编写了一个宏注释处理器,该处理器生成的所有方法与声明案例类所获得的方法相同,但是提供了散列约束。这有点棘手,但总的来说,我对结果感到非常满意。但是,我发现尚未解决的apply
方法周围有一些行为。
以前,当类Foo
是case类或具有手动定义的apply
方法时,我可以编写类似foos.map(Foo)
的代码。但是,既然该方法是由宏处理器生成的,它将抱怨类似以下的错误
type mismatch;
[error] found : Foo.type
[error] required: String => ?
现在,我可以将代码重写为foos.map(Foo.apply)
或foos.map(Foo(_))
,它可以正常工作,但是我无法辨别所生成的代码中的任何差异,从而导致这种差异在行为上。
我怀疑这是Scala编译器太急于将符号解析为类型名称而不是对象名称之类的东西的原因,但是如果有办法在这里做得更好,那就知道了。
答案 0 :(得分:1)
正如@LuisMiguelMejíaSuárez和@DmytroMitin指出的那样,我的关键疏忽是(大多数)case类伴随对象是从FunctionN
类继承的。将其添加到新的或现有的伴随对象的父对象中即可解决此问题。