[英]Pattern Matching on a Lifted Type (Slick Lifted Embedding)
如果我想對 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]
}
但是,當然,可以編譯的;)
您可以使用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
方法無法應用給定的 function ,因此它根據定義返回None
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.