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 .