Scala意为代字号

时间:2014-05-07 15:09:08

标签: scala

嗨,我是Scala中的新手并且遇到以下示例的问题:

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
}

line是什么意思:

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

如何解读波形符号和问号?

1 个答案:

答案 0 :(得分:5)

您正在查看Slick Table定义,该定义遵循使用名为*的方法定义Table的默认投影的Slick 1.0+版本。 ~加入Column以组成一种投影构建器模式中返回的默认视图。 ?表示哪些字段表示Customer类中的Option值,<>表示Projection特征中的方法名称。您可以将<>视为用于取出内容或将内容放入数据库中的客户。如果你有一些不能很好地映射的东西,例如,如果那个表没有隐式的dateTypeMapper,那么<>函数就是你手动调整进出的值的地方。日期转换的客户案例类。

老实说,在IDE中查找这些方法的来源更容易,因为文档不会描述类的详细信息,而且Slick scaladocs中有很多类。

这是指向1.0.1 Lifted Embedded文档的链接。