gpt4 book ai didi

scala - Scala 中的密封特征和抽象密封类之间的具体区别是什么?

转载 作者:行者123 更新时间:2023-12-05 08:57:16 25 4
gpt4 key购买 nike

我希望在 Scala 中定义以下代数数据类型:

sealed trait Beat
case object Rest extends Beat
case object Hit extends Beat

如果我将其定义为:有什么区别吗:

abstract sealed class Beat
case object Rest extends Beat
case object Hit extends Beat

即使用抽象密封类而不是特征?这些定义似乎是等价的。

最佳答案

无论你把它放在(抽象)类还是特质上,sealed 的含义都没有区别。因此,在您的情况下,这两个示例确实(几乎)等效。

当子类想从另一个类继承时,抽象类和特征之间的区别就很明显了:一个类/特征总是只能扩展一个类,但不能扩展多个特征。例如:

class SomeClass

sealed trait Beat1
abstract sealed class Beat2

case object Rest1 extends SomeClass with Beat1 // ok
case object Rest2 extends SomeClass with Beat2 // compile error

否则,抽象类和特征几乎是等价的。实践中的最大差异可能只有在您担心二进制兼容性时才会出现(超出此答案的范围)。

关于scala - Scala 中的密封特征和抽象密封类之间的具体区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34435507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com