怎么是<>由Slick在元组上解决的方法

时间:2016-03-08 10:48:15

标签: scala slick

Linked from this question

我遇到了Slick的文档,发现它要求在表的定义中使用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

1 个答案:

答案 0 :(得分:4)

所以我想为自己找一个 对象Shape实现了三个特征,即ConstColumnShapeImplicitsAbstractTableShapeImplicitsTupleShapeImplicits。这三个特征处理与Slick中的Shapes有关的隐式转换。 TupleShapeImplicits包含将元组转换为TupleShape所需的所有隐式转换方法。

现在在(name, id.?, salary.?).<>(User.tupled,User.unapply)行中发生的事情是方法<>的隐式参数Shape 因此,Shape类属于隐式转换的范围。 TupleShapeImplicits也进入了范围。