我遇到了Slick的文档,发现它要求在表的定义中使用def *
方法来获取映射投影。
所以这条线看起来像这样
def * = (name, id.?).<>(User.tupled,User.unapply)
我看到在<>
上调用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 :(得分:4)
所以我想为自己找一个
对象Shape
实现了三个特征,即ConstColumnShapeImplicits
,AbstractTableShapeImplicits
和TupleShapeImplicits
。这三个特征处理与Slick中的Shapes有关的隐式转换。
TupleShapeImplicits
包含将元组转换为TupleShape所需的所有隐式转换方法。
现在在(name, id.?, salary.?).<>(User.tupled,User.unapply)
行中发生的事情是方法<>
的隐式参数Shape
因此,Shape类属于隐式转换的范围。 TupleShapeImplicits
也进入了范围。