簡體   English   中英

Scala的<>運算符含義

[英]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之間的投影。

可以分步說明:

  1. 為了返回對象,Slick需要一個*投影( *來自SQL中的SELECT *
  2. 可以通過多種方式定義此投影,但是最常見的是使用<>運算符。 簡化后的簽名如下: <>[T, C](apply: T => C, unapply: C => Option[T])
  3. (id, name)構造一個(Int, String)的元組(簡化了,實際上是(Rep[Int], Rep[String]) ,但是Slick稍后會取消它)
  4. <>將其映射到Entry ,因為Entryapply簽名(Int, String) => Entry ,它已通過.tupled轉換為((Int, String)) => Entryunapply簽名使用Entry => Option[(Int, String)]
  5. 現在,您具有*投影,可以從數據庫行和對象行構造Entry對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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