Slick 如何在元组上解析 <> 方法
How is the <> method resolved on a tuple by Slick
我看到了 Slick 的文档,发现它在 table 的定义中强制使用 def *
方法来获取映射投影。
所以这条线看起来像这样
def * = (name, id.?).<>(User.tupled,User.unapply)
我看到 <>
方法在 tuple
上调用 - 在本例中是 Tuple2
。该方法定义在 Slick 代码中的 case class 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
所以我自己想出了一个办法。
对象 Shape
实现了三个特征,即 ConstColumnShapeImplicits
、 AbstractTableShapeImplicits
和 TupleShapeImplicits
。这三个特征处理 Slick 中有关 Shapes 的隐式转换。
TupleShapeImplicits
包含将 Tuple 转换为 TupleShape 所需的所有隐式转换方法。
现在在 (name, id.?, salary.?).<>(User.tupled,User.unapply)
行中,方法 <>
有一个隐式参数 Shape
Shape class 因此属于隐式转换的范围。 TupleShapeImplicits
也进入范围。
我看到了 Slick 的文档,发现它在 table 的定义中强制使用 def *
方法来获取映射投影。
所以这条线看起来像这样
def * = (name, id.?).<>(User.tupled,User.unapply)
我看到 <>
方法在 tuple
上调用 - 在本例中是 Tuple2
。该方法定义在 Slick 代码中的 case class 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
所以我自己想出了一个办法。
对象 Shape
实现了三个特征,即 ConstColumnShapeImplicits
、 AbstractTableShapeImplicits
和 TupleShapeImplicits
。这三个特征处理 Slick 中有关 Shapes 的隐式转换。
TupleShapeImplicits
包含将 Tuple 转换为 TupleShape 所需的所有隐式转换方法。
现在在 (name, id.?, salary.?).<>(User.tupled,User.unapply)
行中,方法 <>
有一个隐式参数 Shape
Shape class 因此属于隐式转换的范围。 TupleShapeImplicits
也进入范围。