Scala tilde meaning

Hi, I am new to Scala and have a problem with the following example:

import scala.slick.driver.MySQLDriver.simple._

    case class Customer(id: Option[Long], firstName: String, lastName: String, birthday: Option[java.util.Date])

/**
 * Mapped customers table object.
 */
object Customers extends Table[Customer]("customers") {

  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)

  def firstName = column[String]("first_name")

  def lastName = column[String]("last_name")

  def birthday = column[java.util.Date]("birthday", O.Nullable)

  def * = id.? ~ firstName ~ lastName ~ birthday.? <>(Customer, Customer.unapply _)

  implicit val dateTypeMapper = MappedTypeMapper.base[java.util.Date, java.sql.Date](
  {
    ud => new java.sql.Date(ud.getTime)
  }, {
    sd => new java.util.Date(sd.getTime)
  })

  val findById = for {
    id <- Parameters[Long]
    c <- this if c.id is id
  } yield c
}

What is the meaning of the line:

def * = id.? ~ firstName ~ lastName ~ birthday.? <>(Customer, Customer.unapply _)

How to interpret tilde marks and question marks?

+4
source share
1 answer

Slick Table, Slick 1.0+ Table, *. ~ Column, , . ? , Option Customer, <> - Projection. <> , . -, , , dateTypeMapper, <> - , , case .

, , , IDE, , Slick .

1.0.1 .

+5

Source: https://habr.com/ru/post/1539597/


All Articles