Playframework,scala案例类和未找到的属性

时间:2013-01-08 12:55:46

标签: scala playframework playframework-2.0 case-class

当我在scala中运行playframework时,我的行为非常奇怪。我使用anorm作为数据库访问层,因此我开始做一些代码,我看到了非常奇怪的scala编译器行为。

这是正在运行的代码:

case class P_Page_Control(Control_ID:Int,
                      Client_ID:String,
                      cContent: String,
                      Page_ID: Int,
                      Language_ID: Int,
                      InsertTime: Date,
                      ChangeTime: Option[Date],
                      IsDeleted: Boolean)

object P_Page_Control {  val parser = {
  get[Int]("Control_ID") ~
  get[String]("Client_ID") ~
  get[String]("Content") ~
  get[Int]("Page_ID") ~
  get[Int]("Language_ID") ~
  get[Date]("InsertTime") ~
  get[Option[Date]]("ChangeTime") ~
  get[Boolean]("IsDeleted") map {
    case a ~ b ~ c ~ d ~ e ~ f ~ g ~ h =>
      P_Page_Control(a, b, c, d, e, f, g, h)
  }}}

目前没有编译错误。工作良好。 但是当我更改属性名称时,我遇到了错误:

object P_Page_Control {  val parser = {
  get[Int]("Control_ID") ~
  get[String]("Client_ID") ~
  get[String]("Content") ~
  get[Int]("Page_ID") ~
  get[Int]("Language_ID") ~
  get[Date]("InsertTime") ~
  get[Option[Date]]("ChangeTime") ~
  get[Boolean]("IsDeleted") map {
    case A_B ~ b ~ c ~ d ~ e ~ f ~ g ~ h =>
      P_Page_Control(A_B, b, c, d, e, f, g, h)
  }}}

由于我是Scala的新手,我认为_是一些神奇的关键词或其他神奇的东西。

所以我将属性名称更改为aBB_AccAd,但没有编译错误。

哎呀 ...

下一个有趣的事情:我将其重命名为AAbbdddsadasdasAAFFFFeeee,我再次看到了编译错误。 那么是什么促使Scala为某些文字集抛出编译错误呢?

这是一个错误或功能吗? : - )

Compilation error

1 个答案:

答案 0 :(得分:3)

模式中以大写字母开头的名称被解释为引用提取器的变量或对象名称(具有unapplyunapplySeq方法的对象)。由于您尚未声明此类变量或对象,因此Scala无法找到它并引发错误。