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

大文字で始まるパターン内の名前は、エクストラクタ(unapplyまたはunapplySeqメソッドを持つオブジェクト)を参照する変数名またはオブジェクト名として解釈されます。そのような変数またはオブジェクトを宣言していないため、Scalaはそれを見つけることができず、エラーをスローします。

于 2013-01-08T12:58:33.183 に答える