簡體   English   中英

提升類型上的模式匹配(Slick Lifted Embedding)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM