【发布时间】:2019-10-09 23:11:20
【问题描述】:
在 RedBook 中 Actor 的简化实现中,他们使用基于节点的 MPSC 基于节点的 Actor 队列。他们通过这行代码定义节点:
private class Node[A](var a: A = null.asInstanceOf[A]) extends AtomicReference[Node[A]]
但是我们如何使用Node[A] 作为AtomicReference 的类型参数,因为我们还没有class Node[A]?它是在 Scala 中声明递归类型的一种方式吗?
【问题讨论】:
-
它叫F-Bounded Polymorphism,你可以搜索更多关于该主题的内容。它在 OOP 语言中是一种比较常见的技术,例如 Java (Java 中的枚举使用它)。你可以使用它,因为类型已经定义,类没有,但类型是的。类型和类不一样。 - PS:在 Scala 中使用它并不常见,因为该语言缺乏对正确编码的适当支持,主要是因为 Typeclasses 是更好的选择。
标签: scala types locking actor f-bounded-polymorphism