如果我想在Scala中对基本选项类型进行模式匹配,我将沿着
val opt = Option(5)
val lessThanTen = opt match {
case Some(e) => if (e < 10) true else false
case None => None
}
但是,假设opt是Slick的一项查询的结果,因此具有Rep[Option[Int]]
的提升嵌入类型
如何以允许我们看到提升类型内部的方式执行相同的模式匹配?即类似于
val opt = Rep(Option(5))
val lessThanTen = opt match {
case Rep[Some(e)] => Rep[if (e < 10) true else false]
case Rep[None] => Rep[None]
}
但是,当然是可以编译的;)
答案 0 :(得分:1)
您可以使用map
方法对Rep
的内容进行一些操作。
val rep: Rep[Option[Int]] = ???
val boolRep = rep.map {
case Some(i) => Some(i < 10)
case None => None
}
甚至更好:Option
与Scala中的许多其他集合类型一样,也具有类似的map
方法,因此您可以编写
val boolRep = rep.map(_.map(_ < 10))
在该表达式中,第一个_
是Option[Int]
,第二个是Int
本身。在Option[Int]
为None
的情况下,map
方法没有任何可应用给定功能的方法,因此它按定义返回None
。