Что делает оператор <> в Slick?

Я просматривал документацию по Slick, чтобы настроить быстро работающий прототип.

В разделе Mapped Tables я вижу оператор <> в упомянутом примере, но нигде не могу найти никакой документации для этого. Нужна помощь в понимании этого.

Ответ 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

Ответ 2

Это не оператор scala, это метод, определяемый с помощью slick ShapedValue class

Как вы можете видеть в связанной с вами документации, она использовала для сопоставления проекции к классу case и из него, предоставляя два метода

 def * = (id.?, first, last) <> (User.tupled, User.unapply)