2

我正在阅读有关 Streams 的 Scala 教科书

sealed trait Stream[+A]
case object Empty extends Stream[Nothing]
case class Cons[+A](h: () => A, t: () => Stream[A]) extends Stream[A]

教科书上写着

“由于技术限制,这些是必须明确强制的 thunk,而不是名称参数。”

我想教科书的意思是h: ()=>A, t: ()=>Stream[A]不应该用 h: =>A, t: =>Stream[A]. 但是什么是所谓的“技术限制”禁止这样做呢?

4

1 回答 1

4

但是什么是所谓的“技术限制”禁止这样做呢?

技术限制是目前(从 Scala 2.12.x 开始),Scala 不支持case classeslazy val上的参数或名称参数。

为什么?由于案例类获得编译器为它们派生的自动方法实现,例如equalshashCode,例如,它们是根据案例类计算的。如何计算一个 hashCode 值,比如一个无限流?

关于为什么案例类不能具有名称参数的更完整的答案可以在Scala 案例类禁止按名称调用参数中找到?

于 2018-02-15T09:54:55.943 回答