我正在阅读有关Streams的Scala教科书
sealed trait Stream[+A]
case object Empty extends Stream[Nothing]
case class Cons[+A](h: () => A, t: () => Stream[A]) extends Stream[A]
教科书上写着
“由于技术限制,这些都是必须的 显式强制,而不是按名称参数。 “
我认为教科书意味着不应将h: ()=>A, t: ()=>Stream[A]
替换为h: =>A, t: =>Stream[A]
。但是所谓的“技术限制”是什么阻止了这一点?
答案 0 :(得分:4)
但是所谓的“技术限制”是什么阻止了这一点?
技术限制是目前(从Scala 2.12.x开始),Scala不支持lazy val
参数或案例类上的名称参数。
为什么呢?由于案例类得到了编译器为它们派生的自动方法实现,例如equals
和hashCode
,它们是根据案例类计算的 values 。如何计算hashCode值,例如,无限流?