我目前正在使用 Scala 开展一个项目,似乎我并不完全了解 Scala 的类型系统:-/
我有以下情况:
def reviews(id: Int) = Action { implicit request =>
Ok(html.products.reviews(
reviewlist,
reviewlist
.find(review => review.id == id)
.getOrElse(reviewlist.headOption)
))
}
不幸的是,编译器说,他无法将 Product 转换为 Option[Review],所以我更改了代码
reviewlist
.find(review => review.id == id)
.getOrElse(reviewlist.headOption)
和
id match {
case 0 => reviewlist.headOption
case id => reviewlist.find(review => review.id == id)
}
这似乎现在可以工作,即使它与它不完全相同,例如,如果提交了无效的评论 ID,则不再显示第一条记录。然后它会假装还没有可用的评论。
然后我将问题分解为一个非常简单的示例:
val a: Option[Int] = Some(1).getOrElse(Some(1))
那么,有谁知道,为什么右侧的表达式不是 Option[Int] 类型的?Some(1) 和 None 都直接从 Option 继承,这个表达式实际上是 Some(1) 或者我错了吗?
有趣的是
val a: Option[Int] = None.getOrElse(None)
有效,但所有其他组合不...