【发布时间】:2013-07-09 20:46:28
【问题描述】:
我目前正在使用 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) in any 还是我错了?
有意思
val a: Option[Int] = None.getOrElse(None)
有效,但所有其他组合都无效...
【问题讨论】:
标签: scala