使用Scala的结构类型有哪些性能和维护注意事项?

Lan*_*uhn 7 scala

我的同事不会让我在两个方面使用它们.:(

Jes*_*per 9

性能考虑因素是结构类型中的方法是通过反射调用的,这在JVM上比常规方法调用慢得多.有关详细信息,请参阅此答案和评论.


Lan*_*dei 9

我发现当我需要结构类型时,它几乎总是因为我想要使用的库设计不正确(例如在StringBuilder/StringBuffer等情况下缺少超类).

因此,如果您出于其他原因要使用结构类型,则可能是设计问题 - 这比配置或性能考虑更严重.Scala的类型系统功能强大,使用结构类型有点像"放弃"以"正常"方式使其正确.因此,如果你有一些似乎"需要"结构类型的代码,试着分析它为什么会这样,并且可能会询问社区是否可以改进(https://codereview.stackexchange.com/似乎是一个好地方如果你被卡住了.

顺便说一句,每个人都倾向于过度使用他只是"grokked"的功能,例如初学者模式匹配就像他们得到概念一样疯狂,即使有更好的方法(例如在地图,flatMap,foreach等选项功能的情况下).