gpt4 book ai didi

scala - "A with B"是一种类型吗?

转载 作者:行者123 更新时间:2023-12-04 20:09:20 25 4
gpt4 key购买 nike

在 Scala 中,我们像这样使用混合:

class C extends A with B

我将此声明理解为 CA with B 的子类.这是真的?或 C只是 A 的子类和 B (我认为在不支持多继承的 JVM 上是不可能的)?

A with B是一种类型,为什么这条线不起作用?
classOf[A with B]

我考虑的另一个原因 A with B类型是它可以用于模式匹配的事实:
val c = new C
val u = c match { case a: A with B => 1 } // 1

最佳答案

Scala 通过 支持多重继承性状 .任何类都可以扩展 0 或 1 个类,但也可以“混合”任意数量的特征。 (有一些编译器魔术可以在幕后重新排列事物以符合 JVM 的限制)语法是沿着

class MyClass extends [ClassOrTrait] with [Trait] with [AnotherTrait] with ...

所以你的 C 类定义更像是
class ((C extends A) with B)比赞 class (C extends (A with B)) A with B是一个类型,可以用作类型别名,但 classOf方法需要一个类:
scala> type AB = A with B
defined type alias AB

scala> classOf[AB]
<console>:11: error: class type required but A with B found
classOf[AB]
^

对比
scala> class AB extends A with B
defined class AB

scala> classOf[AB]
res12: Class[AB] = class AB

关于scala - "A with B"是一种类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640711/

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