Ответ 1
Оператор <>
определяет связь между Row
в Table
и case class
.
case class User(id: Option[Int], first: String, last: String)
ROW |id | first | last |
Таким образом, данные сначала извлекаются из таблиц как n-tuple
(левая сторона <>
), а затем преобразуются в case class
(правая сторона <>
).
Чтобы сделать преобразование работы класса case, нужны два метода:
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