0

我使用 Slick2.0 中的 HList 得到以下编译错误。大多数时候我会收到此错误,但有时我不会收到此错误。另请注意,我使用的是 Scala IDE 3.0.3,并且在 Eclipse 中没有出现任何编译错误(这很奇怪)。我什至尝试在运行之前关闭所有 JVM 进程sbt clean compile,但仍然出现相同的编译错误,尽管间歇性:

$ sbt clean compile
[info] Resolving org.scoverage#scalac-scoverage-plugin_2.10;0.99.5 ...
[info] Done updating.
[error] ...../app/models/example/Up.scala:77: type mismatch;
[error]  found   : Option[scala.slick.collection.heterogenous.HCons[Long,scala.slick.collection.heterogenous.HCons[Option[java.sql.Timestamp],scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HNil.type]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
[error]  required: Option[scala.slick.collection.heterogenous.syntax.::[Long,scala.slick.collection.heterogenous.syntax.::[Option[java.sql.Timestamp],scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.HNil.type]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
[error]            Up.unapply _
[error]               ^
[error] one error found
[error] (compile:compile) Compilation failed
[error] Total time: 20 s, completed 31 Oct, 2014 9:20:31 PM

有问题的文件app/models/example/Up.scala如下所示:

package models.example

import play.api.db.slick.Config.driver.simple._
import scala.slick.lifted.Tag
import scala.slick.collection.heterogenous._
import java.sql.Timestamp


class Up(
  val id: Long, val createdDate: Option[Timestamp], val c2: Boolean,
  val c3: Boolean, val c4: Boolean, val c5: Boolean, val c6: Boolean,
  val c7: Boolean, val c8: Boolean, val c9: Boolean, val c10: Boolean,
  val c11: Boolean, val c12: Boolean, val c13: Boolean, val c14: Boolean,
  val c15: Boolean, val c16: Boolean, val c17: Boolean, val c18: Boolean,
  val c19: Boolean, val c20: Boolean, val c21: Boolean, val c22: Boolean,
  val c23: Boolean, val c24: Boolean, val c25: Boolean, val c26: Boolean,
  val c27: Boolean, val c28: Boolean, val c29: Boolean, val c30: Boolean,
  val c31: Boolean, val c32: Boolean, val c33: Boolean, val c34: Boolean,
  val c35: Boolean, val c36: Boolean, val c37: Boolean, val c38: Boolean,
  val c39: Boolean, val c40: Boolean, val c41: Boolean, val c42: Boolean,
  val c43: Boolean, val c44: Boolean, val c45: Boolean, val c46: Boolean)

object Up {
  def apply(
    id: Long, createdDate: Option[Timestamp],
    c2: Boolean, c3: Boolean, c4: Boolean, c5: Boolean,
    c6: Boolean, c7: Boolean, c8: Boolean, c9: Boolean, c10: Boolean,
    c11: Boolean, c12: Boolean, c13: Boolean, c14: Boolean, c15: Boolean,
    c16: Boolean, c17: Boolean, c18: Boolean, c19: Boolean, c20: Boolean,
    c21: Boolean, c22: Boolean, c23: Boolean, c24: Boolean, c25: Boolean,
    c26: Boolean, c27: Boolean, c28: Boolean, c29: Boolean, c30: Boolean,
    c31: Boolean, c32: Boolean, c33: Boolean, c34: Boolean, c35: Boolean,
    c36: Boolean, c37: Boolean, c38: Boolean, c39: Boolean, c40: Boolean,
    c41: Boolean, c42: Boolean, c43: Boolean, c44: Boolean, c45: Boolean,
    c46: Boolean
  ) = new Up(
    id, createdDate,
    c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
    c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23,
    c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34,
    c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45,
    c46
  )

  def unapply(x: Up) = {
    val data = x.id ::
    x.createdDate ::
    x.c2 :: x.c3 :: x.c4 :: x.c5 :: x.c6 :: x.c7 :: x.c8 :: x.c9 :: x.c10 ::
    x.c11 :: x.c12 :: x.c13 :: x.c14 :: x.c15 :: x.c16 :: x.c17 :: x.c18 :: x.c19 ::
    x.c20 :: x.c21 :: x.c22 :: x.c23 :: x.c24 :: x.c25 :: x.c26 :: x.c27 :: x.c28 ::
    x.c29 :: x.c30 :: x.c31 :: x.c32 :: x.c33 :: x.c34 :: x.c35 :: x.c36 :: x.c37 ::
    x.c38 :: x.c39 :: x.c40 :: x.c41 :: x.c42 :: x.c43 :: x.c44 :: x.c45 :: x.c46 ::
     HNil

     Option[data.type](data)
   }
 }

 class Ups(tag: Tag) extends Table[Up](tag, "ups") {
   def * = (
     id :: createdDate ::
       c2 :: c3 :: c4 :: c5 :: c6 :: c7 :: c8 :: c9 :: c10 :: c11 :: c12 :: c13 ::
       c14 :: c15 :: c16 :: c17 :: c18 :: c19 :: c20 :: c21 :: c22 :: c23 :: c24 ::
       c25 :: c26 :: c27 :: c28 :: c29 :: c30 :: c31 :: c32 :: c33 :: c34 :: c35 ::
       c36 :: c37 :: c38 :: c39 :: c40 :: c41 :: c42 :: c43 :: c44 :: c45 :: c46 ::
       HNil).shaped <> (
     {
       case x => Up(
         x(0), x(1), x(2),
         x(3), x(4), x(5), x(6), x(7), x(8), x(9), x(10), x(11), x(12), x(13),
         x(14), x(15), x(16), x(17), x(18), x(19), x(20), x(21), x(22), x(23), x(24),
         x(25), x(26), x(27), x(28), x(29), x(30), x(31), x(32), x(33), x(34), x(35),
         x(36), x(37), x(38), x(39), x(40), x(41), x(42), x(43), x(44), x(45), x(46)
       )
     },
         {
           Up.unapply _
         })

  def id = column[Long]("id", O.PrimaryKey, O.AutoInc, O.NotNull)
  def createdDate = column[Option[Timestamp]]("created_date")
  def c2 = column[Boolean]("c2")
  def c3 = column[Boolean]("c3")
  def c4 = column[Boolean]("c4")
  def c5 = column[Boolean]("c5")
  def c6 = column[Boolean]("c6")
  def c7 = column[Boolean]("c7")
  def c8 = column[Boolean]("c8")
  def c9 = column[Boolean]("c9")
  def c10 = column[Boolean]("c10")
  def c11 = column[Boolean]("c11")
  def c12 = column[Boolean]("c12")
  def c13 = column[Boolean]("c13")
  def c14 = column[Boolean]("c14")
  def c15 = column[Boolean]("c15")
  def c16 = column[Boolean]("c16")
  def c17 = column[Boolean]("c17")
  def c18 = column[Boolean]("c18")
  def c19 = column[Boolean]("c19")
  def c20 = column[Boolean]("c20")
  def c21 = column[Boolean]("c21")
  def c22 = column[Boolean]("c22")
  def c23 = column[Boolean]("c23")
  def c24 = column[Boolean]("c24")
  def c25 = column[Boolean]("c25")
  def c26 = column[Boolean]("c26")
  def c27 = column[Boolean]("c27")
  def c28 = column[Boolean]("c28")
  def c29 = column[Boolean]("c29")
  def c30 = column[Boolean]("c30")
  def c31 = column[Boolean]("c31")
  def c32 = column[Boolean]("c32")
  def c33 = column[Boolean]("c33")
  def c34 = column[Boolean]("c34")
  def c35 = column[Boolean]("c35")
  def c36 = column[Boolean]("c36")
  def c37 = column[Boolean]("c37")
  def c38 = column[Boolean]("c38")
  def c39 = column[Boolean]("c39")
  def c40 = column[Boolean]("c40")
  def c41 = column[Boolean]("c41")
  def c42 = column[Boolean]("c42")
  def c43 = column[Boolean]("c43")
  def c44 = column[Boolean]("c44")
  def c45 = column[Boolean]("c45")
  def c46 = column[Boolean]("c46")
}

object Ups {
  val ups = TableQuery[Ups]
  def get(id: Long)(implicit session: Session): Option[Up] = {ups.where(_.id === id).firstOption}
}

我认为这可能是因为 Scala 编译器中的一个错误 - https://issues.scala-lang.org/browse/SI-8146

所以我升级到 Scala 2.10.4 但仍然收到编译错误。

内容build.sbt

name := "play-sample"

version := "0.1-SNAPSHOT"

scalaVersion in ThisBuild := "2.10.4"

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  "org.webjars" %% "webjars-play" % "2.2.0",
  "org.webjars" % "bootstrap" % "3.1.1",
  "com.nulab-inc" %% "play2-oauth2-provider" % "0.7.1",
  "com.typesafe.play" %% "play-slick" % "0.6.1",
  "mysql" % "mysql-connector-java" % "5.1.18",
  "org.xerial" % "sqlite-jdbc" % "3.7.2"
)

play.Project.playScalaSettings

instrumentSettings

我究竟做错了什么?

我怎样才能解决这个问题 ?

4

2 回答 2

0

我在这里报告了这个问题,所以只是为了记录我找到了解决方案。

我不得不覆盖播放设置并将 Scala-2.10.4 设置为编译器。这是build.sbt现在的样子:

play.Project.playScalaSettings

name := "play-sample"

version := "0.1-SNAPSHOT"

scalaVersion := "2.10.4"

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  "org.webjars" %% "webjars-play" % "2.2.0",
  "org.webjars" % "bootstrap" % "3.1.1",
  "com.nulab-inc" %% "play2-oauth2-provider" % "0.7.1",
  "com.typesafe.play" %% "play-slick" % "0.6.1",
  "mysql" % "mysql-connector-java" % "5.1.18",
  "org.xerial" % "sqlite-jdbc" % "3.7.2"
)

instrumentSettings

它向我展示了 scala 版本 2.10.3

[play-sample] $ scalaVersion
[info] 2.10.3

然后我更新了build.sbt

[play-sample] $ scalaVersion
[info] 2.10.4

现在它编译得很好,没有任何错误。

于 2014-11-05T06:40:32.793 回答
0

我有一个类似的问题。我在那个项目中使用了 HList,我意识到这是由在 Eclipse 中运行的编译过程与 SBT 发布的编译“冲突”引起的。

只需尝试关闭 Eclipse 并通过 SBT 编译您的项目,看看会发生什么。

我试过在 Scala 2.10.4 和 Scala 2.11.2 上编译你的项目,我没有问题。如果添加“build.sbt”,查看“libraryDependencies”可能会有所帮助。

于 2014-10-31T20:26:41.617 回答