在新应用程序中运行测试时出现 Scala 错误。无法展开宏?



我正在尝试学习Scala,Scalatest和SBT的基础知识,我正在关注一个教程。这是我的built.sbt文件:

name := "demo-hello"
version := "0.1"
scalaVersion := "2.12.6"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"

我有一个看起来像这样的测试(表明这是不必要的:

package demo
import org.scalatest.FunSuite
class HelloTest extends FunSuite {
  test("say hello method works correctly") {
    val hello = new Hello
    assert(hello.sayHello("Scala") == "Hello, Scala!")
  }
}

我该怎么办?我正在尝试运行测试,但我会收到此错误:

Error:(8, 36) can't expand macros compiled by previous versions of Scala
    assert(hello.sayHello("Scala") == "Hello, Scala!")

我对%符号BTW并不那么熟悉。

fix

我将build.sbt更改为:

name := "demo-hello"
version := "0.1"
scalaVersion := "2.10"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"

剩下的问题:

  1. 因此,似乎正在降级到Scalaversion" 2.10"。为什么?
  2. 什么是工件?scalatest显然是人工制品?
  3. 在我的机器上,鳞片2.10在哪里?看来我只有Scala 2.12。我的项目文件夹中的何处是版本2.10?

稍微不顺序回答您的问题:

2-"工件"是由Maven,SBT或其他构建系统构建的。对于Scala或Java,这几乎总是一个JAR文件。libraryDependencies中的每个项目都在Maven存储库中指定一个文件(伪像的数据库(。

1- Scala类文件在scala的次要版本之间不兼容。当您从Maven存储库下载Scala Jar时,将Scala版本指定为文物名称的一部分。依赖关系中的_2.10声明您希望使用Scala 2.10编译的scalatest版本 - 这就是为什么您在Scala 2.12应用程序中使用它遇到错误的原因。

在SBT中声明对Scala伪像的依赖关系时,您应始终使用%%操作员,该操作员会自动将适当的后缀附加到您的伪像,例如:

// This works for any scalaVersion setting.
libraryDependencies += "org.scalatest" %% "scalatest" % "2.1.0" % "test"

3 -sbt处理自动下载Scala版本的适当运行时文件。

最新更新