[英]Scala`s <> operator meaning
我正在嘗試學習Scala,以便將其與Play Framework結合使用。 現在,我正在處理Play for Scala + Slick的數據庫層,並且正在使用我不理解的教程中的一段代碼,並且無法在Scala手冊中找到任何信息。
這是東西。 我有一個名為Entry的模型。 它被定義為case類,並且我有一個從Table擴展的同伴類。
case class Entry(id: Int, name: String)
class EntryTable(tag: Tag) extends Table[Entry](tag, "entries") {
def id = column[Int]("id", O.PrimaryKey)
def name = column[String]("name")
def * = (id, name) <> (Entry.tupled, Entry.unapply(_))
}
我不明白的是def *
的最后一行。 我知道,這與反思有關。 基本上,我會理解def * = (id, name)
,但是另一部分又意味着什么呢。 我找不到運算符<>
含義嗎? 有人可以向我解釋嗎?
運算符<>
表示元組(Int, String)
和案例類Entry
之間的投影。
可以分步說明:
*
投影( *
來自SQL中的SELECT *
) <>
運算符。 簡化后的簽名如下: <>[T, C](apply: T => C, unapply: C => Option[T])
(id, name)
構造一個(Int, String)
的元組(簡化了,實際上是(Rep[Int], Rep[String])
,但是Slick稍后會取消它) <>
將其映射到Entry
,因為Entry
已apply
簽名(Int, String) => Entry
,它已通過.tupled
轉換為((Int, String)) => Entry
, unapply
簽名使用Entry => Option[(Int, String)]
。 *
投影,可以從數據庫行和對象行構造Entry
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.