【问题标题】:Playframework, scala case class and property not found未找到 Playframework、scala 案例类和属性
【发布时间】:2013-01-08 21:00:58
【问题描述】:

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

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

【问题讨论】:

    标签: scala playframework playframework-2.0 case-class


    【解决方案1】:

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

    【讨论】:

    • 感谢您非常快速和良好的回答。所以我发现了 Scala 的一个新特性 :-)
    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多