我正在浏览Slick的文档,以设置一个快速工作的原型。我正在经历this link。
在Mapped Tables部分中,我在上述示例中看到了<>
运算符,但无法在任何地方找到任何文档。需要帮助来理解这一点。
答案 0 :(得分:21)
<>
运算符定义了Row
和Table
中的case class
之间的关系。
case class User(id: Option[Int], first: String, last: String)
ROW |id | first | last |
因此,首先将数据作为n-tuple
<>
的左侧从Tabel中取出,然后转换为case class
(<>
的右侧)
要使案例类工作转换,需要两种方法:
Row
至n-tuple
至case class
。scala> User.tupled
res6: ((Option[Int], String, String)) => User = <function1>
因此,当给定三User
作为参数时,此函数可以创建(Option[Int], String, String)
。
case class
到n-tuple
。scala> User.unapply _
res7: User => Option[(Option[Int], String, String)] = <function1>
此功能以相反的方式提供功能。给定用户它可以提取三元组。此模式称为Extractor
。在这里,您可以了解更多相关信息:http://www.scala-lang.org/old/node/112
答案 1 :(得分:3)
它不是scala运算符,它是由slick的ShapedValue类
定义的方法正如您在链接的文档中所看到的,它用于在提供两种方法的案例类中映射投影
def * = (id.?, first, last) <> (User.tupled, User.unapply)
答案 2 :(得分:1)
如果您clone the Slick source repo和grep代表def <>
,您会发现<>
是ShapedValue
的方法,返回MappedProjection
。