2016-03-08 129 views
3

Linked from this question通過油滑

如何解決對記錄進行<>方法,我碰到油滑的文檔,發現它要求在一個表的定義def *方法來獲取映射投影。 所以行看起來像這樣

def * = (name, id.?).<>(User.tupled,User.unapply) 

Slick example here

我看到<>方法被調用在tuple - 在這種情況下Tuple2。該方法在Slick代碼中的案例類ShapedValue上定義。如何找出正在執行查找的隱式方法?

這裏是我的進口:

import scala.concurrent.Await 
import scala.concurrent.ExecutionContext.Implicits.global 
import scala.concurrent.duration.Duration 
import slick.driver.H2Driver.api._ 
import slick.lifted.ShapedValue 
import slick.lifted.ProvenShape 
+0

您的進口產品是什麼? – mfirry

+0

進口scala.concurrent.Await 進口scala.concurrent.ExecutionContext.Implicits.global 進口scala.concurrent.duration.Duration 進口slick.driver.H2Driver.api._ 進口slick.lifted.ShapedValue 進口slick.lifted .ProvenShape –

+1

Ensime告訴您應用了哪些隱含條件 - 可能要求您的IDE提供類似信息。 – Reactormonk

回答

3

所以我想,一出自己。
對象Shape實現了三個性狀,即ConstColumnShapeImplicits,AbstractTableShapeImplicitsTupleShapeImplicits。這三個特徵處理關於浮油中的形狀的隱式轉換。 TupleShapeImplicits包含將元組轉換爲TupleShape所需的所有隱式轉換方法。

現在正在發生什麼行(name, id.?, salary.?).<>(User.tupled,User.unapply)是,<>Shape 一個隱含參數從而Shape類進來範圍的隱式轉換的方法。 TupleShapeImplicits也進入了範圍。