【发布时间】:2021-01-27 00:03:02
【问题描述】:
我的 Scala 项目有以下特点
sealed trait Value
case class Float(f: Double) extends Value
case class Bool(b: Boolean) extends Value
case object Error extends Value
后来我得到了lst: List[Value]的值。
我正在尝试使用lst.head.f 获取列表的第一个元素的值,但出现以下错误Cannot resolve symbol f。
根据我从类似主题的其他堆栈溢出问题中收集到的信息,它应该可以工作,但事实并非如此。
【问题讨论】:
-
lst.head.f在lst = List(Bool(true))或lst = List(Error)上应该产生什么? -
可能你想要
lst.head match { case Float(f) => f }或lst.head match { case x: Float => x.f }。 -
如果列表为空怎么办?如果第一个值不是 Float 怎么办?
-
既然你说你是 Scala 的新手,让我给你一些建议。 Scala 不是另一种 OOP 语言,您只需要学习它的语法。 Scala 是 OOP 和 FP 的混合体,因此,您需要重新学习很多东西,尤其是如何设计程序以及如何解决问题。不变性、选项、高阶函数等是函数式语言的设计模式。所以建议是买一本书或找到一门课程,不仅可以指导您了解语法,还可以指导您了解函数式程序员的思维方式。
标签: scala class pattern-matching case traits