2

当我在 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 为某些字面量抛出编译错误呢?

这是错误还是功能?:-)

编译错误

4

1 回答 1

3

模式中的名称以大写字母开头,被解释为引用提取器(具有unapplyorunapplySeq方法的对象)的变量或对象名称。由于您还没有声明这样的变量或对象,Scala 找不到它并抛出错误。

于 2013-01-08T12:58:33.183 回答