scala - ejemplos - operadores de asignacion en javascript
¿Qué hace el operador<> en Slick? (3)
Estaba recorriendo la documentación de Slick para configurar un prototipo de trabajo rápido. Estaba pasando por este enlace .
En la sección Tablas asignadas, veo un operador <>
en el ejemplo mencionado, pero no puedo encontrar ninguna documentación para eso en ninguna parte. Necesita ayuda para entender esto.
El operador <>
define una relación entre una Row
en la Table
y una case class
.
case class User(id: Option[Int], first: String, last: String)
ROW |id | first | last |
Así que los datos primero se toman de las Tablas como una n-tuple
(lado izquierdo de <>
) y luego se transforman en la case class
(lado derecho de <>
).
Para hacer que la transformación de la clase de caso funcione, se necesitan dos tipos de métodos:
Row
a n-tuple
a case class
.
scala> User.tupled
res6: ((Option[Int], String, String)) => User = <function1>
Así que esta función puede crear un User
cuando se le da un triple (Option[Int], String, String)
como argumento.
case class
a n-tuple
para ser escrito en DB.
scala> User.unapply _
res7: User => Option[(Option[Int], String, String)] = <function1>
Esta función proporciona la funcionalidad al revés. Dado un usuario puede extraer un triple. Este patrón se llama un Extractor
. Aquí puede aprender más sobre esto: http://www.scala-lang.org/old/node/112
No es un operador de ShapedValue , es un método definido por la clase ShapedValue de ShapedValue
Como puede ver en la documentación que vinculó, se usa para mapear una proyección hacia y desde una clase de caso que proporciona dos métodos
def * = (id.?, first, last) <> (User.tupled, User.unapply)
Si clona la fuente Slick repo y grep para def <>
, encontrará que <>
es un método de ShapedValue
que devuelve MappedProjection
.