scala - 为什么这种类型相等检查在 SBT 中失败但在我的 IDE 中成功?
问题描述
我在编写单元测试时遇到了一个有趣的问题,当我通过我的 IDE (IntelliJ Idea) 运行测试时,一段特定的类型检查 Scala 代码成功,而当我通过 SBT 运行它们时失败sbt test
。有问题的代码就是这一行:
tag == typeTag[Unit]
这里的标签是TypeTag[A]
. 因此,检查是通过反射确定参数类型是否为 Unit,仅此而已。我知道相等性检查有缺陷,我应该使用 Scala 的反射 API 运算符,我已经重写了它,现在它通过我的 IDE 和 SBT 通过测试:
tag.tpe =:= typeOf[Unit]
我的问题不是如何解决我的问题(因为我已经有),而是为什么有缺陷的检查在通过我的 IDE 运行时总是会成功,但在通过 SBT 运行时总是失败,这两个操作之间有什么不同会导致这种差异?
(一些版本信息:我在我的代码中使用 JRE 11.0.2、Scala 2.12 和 SBT 1.2.8。编辑:如下所述,它也发生在 Java 8 上)
编辑:我的编译器设置,按照要求。原谅审查,我宁愿小心公司的细节。
还有我在 build.sbt 中使用的 scalacOptions、编译器插件和测试标志:
val scalacOpts = Seq(
"-Ywarn-unused:implicits",
"-Ywarn-unused:imports",
"-Ywarn-unused:locals",
"-Ywarn-unused:params",
"-Ywarn-unused:patvars",
"-Ywarn-unused:privates",
"-Ypartial-unification",
"-deprecation",
"-encoding", "UTF-8",
"-feature",
"-language:existentials",
"-language:higherKinds",
"-language:implicitConversions",
"-unchecked",
"-Xlint",
"-Yno-adapted-args",
"-Ywarn-dead-code",
"-Ywarn-numeric-widen",
"-Ywarn-value-discard",
"-Xfuture"
)
addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.9")
addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.0")
testFrameworks += new TestFramework("org.scalameter.ScalaMeterFramework")
logBuffered := false
parallelExecution in Test := false
解决方案
推荐阅读
- javascript - Bug 问题:失败的道具类型:道具`onClick`在`Letter`中标记为必填,但其值为`undefined`
- apache - 从私钥生成 Apache 公钥
- java - 根据 log4j2 中的每小时在新目录中生成日志?
- django - 如何在 ListView 类中添加模板条件?
- phpmyadmin - 我在使用代客连接到 phpmyadmin 时遇到问题
- spartacus-storefront - 在 SAP Spartacus 上渲染组件的正确方法是什么?
- javascript - 这个函数的时间复杂度是多少?
- java - 使用或不使用 Itext 的 PdfCopy 类连接 2 个不同的 pdf
- java - 我创建了一个自定义类,它可以将日期和时间作为字符串获取我想访问对象并将数据设置为类任何建议
- linux - bash中的连字符和垂直线