如何获取案例类的所有自动生成的方法的代码,以便在重构为常规(非案例)类时干净地保留它们中的任何一个?是否有一些编译标志,揭示案例类的自动生成方法,或其他一些方式,最终将此减少到一个削减&粘贴?
我的印象是有编译标志可以自动显示扩展的定义......
答案 0 :(得分:1)
你可以看到编译器使用-Xprint:<phase>
标志去掉了源代码。对于您的示例(查看为案例类生成的代码),请运行:
scalac -Xprint:typer YourScala.sca
使用-Xshow-phases
标记,您将看到所有可用的阶段。
但是你看到的输出不是可编译的scala源代码,而是一些中间表示。
答案 1 :(得分:0)
这可能不那么容易。
编译器生成字节代码,因此无法复制编译器输出并粘贴到源代码中。
您可以通读生成的字节代码并手动为类似方法重新创建Scala代码。这将是一个有点费力,但方法相对简单,理解字节代码是一件好事。
如果某处有可用的Scala反编译器,那么反编译已编译的案例类将显示您想要的代码。
鉴于这些方法依赖于case类的字段,它们不太可能在编译器实现中作为可以复制和粘贴的任何东西使用。
也许最好的办法是查看语言规范并实现案例类所描述的方法。