Я просматривал документацию по 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.