运行 在新应用程序中测试时发生 Scala 错误。不能展开宏?
Scala error when running test in new application. can't expand macros?
我正在尝试学习 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!")
顺便说一句,我对 %
符号不是很熟悉。
FIX
我将 build.sbt
更改为:
name := "demo-hello"
version := "0.1"
scalaVersion := "2.10"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"
剩余问题:
- 所以降级到 scalaVersion“2.10”似乎有效。为什么?
- 什么是神器?
scalatest
明显是神器?
- scalaversion 2.10 在我的机器上保存在哪里?看来我只有 scala 2.12。我的项目文件夹中的哪个版本是 2.10?
回答你的问题有点乱:
2 - "artifact" 是由 maven、sbt 或其他构建系统构建的。对于 Scala 或 Java,这几乎总是一个 jar 文件。 libraryDependencies
中的每个项目都指定了 Maven 存储库(工件数据库)中的一个文件。
1 - Scala class 文件在次要版本的 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 版本下载适当的运行时文件。
我正在尝试学习 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!")
顺便说一句,我对 %
符号不是很熟悉。
FIX
我将 build.sbt
更改为:
name := "demo-hello"
version := "0.1"
scalaVersion := "2.10"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"
剩余问题:
- 所以降级到 scalaVersion“2.10”似乎有效。为什么?
- 什么是神器?
scalatest
明显是神器? - scalaversion 2.10 在我的机器上保存在哪里?看来我只有 scala 2.12。我的项目文件夹中的哪个版本是 2.10?
回答你的问题有点乱:
2 - "artifact" 是由 maven、sbt 或其他构建系统构建的。对于 Scala 或 Java,这几乎总是一个 jar 文件。 libraryDependencies
中的每个项目都指定了 Maven 存储库(工件数据库)中的一个文件。
1 - Scala class 文件在次要版本的 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 版本下载适当的运行时文件。