Я просматривал документацию по Slick, чтобы настроить быстро работающий прототип.
В разделе Mapped Tables я вижу оператор <>
в упомянутом примере, но нигде не могу найти никакой документации для этого. Нужна помощь в понимании этого.
Я просматривал документацию по Slick, чтобы настроить быстро работающий прототип.
В разделе Mapped Tables я вижу оператор <>
в упомянутом примере, но нигде не могу найти никакой документации для этого. Нужна помощь в понимании этого.
Оператор <>
определяет связь между 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
Это не оператор scala, это метод, определяемый с помощью slick ShapedValue class
Как вы можете видеть в связанной с вами документации, она использовала для сопоставления проекции к классу case и из него, предоставляя два метода
def * = (id.?, first, last) <> (User.tupled, User.unapply)
Если вы клонируете исходное репозиторий Slick и grep для def <>
, вы обнаружите, что <>
- это метод ShapedValue
, который возвращает MappedProjection
.