【问题标题】:What does the "not a simple type" warning mean in Scala?Scala 中的“不是简单类型”警告是什么意思?
【发布时间】:2012-02-01 05:44:05
【问题描述】:

我的 Scala 2.9.1 项目现在发出 176 个警告,几乎都和这个一样:

[warn] Not a simple type:
[warn]  Type: _29.type#source.type forSome { type _29.type <: Ontology.this.TruncationFunctor } (class class scala.tools.nsc.symtab.Types$ExistentialType)
[warn]  Transformed: class xsbti.api.Existential

(一开始很少,但我的编码风格似乎引发了这个警告,因为我越来越多。)

谁能向我解释这个警告的含义,以及我应该如何避免它?编译器不会发出任何行号,所以我什至不确定它到底来自哪里。

【问题讨论】:

  • 当然,如果您在编写代码时创建这些,您可以弄清楚是什么导致了它们。
  • 尝试通过使用代码的 sn-ps 创建一个小测试文件来隔离警告。
  • @RexKerr,有人会这么想。不幸的是,它们出现在我的代码的大型重构期间(例如,当将大量类型参数切换到抽象类型成员时),在此期间错误淹没了警告。由于所有内容都已编译(带有警告)并在最后进行了测试,因此我没有停下来调查警告。
  • @ScottMorrison - 那么你并没有真正得到“越来越多”......你只是把它们都放在一个大块中?
  • @RexKerr,好吧,他们出现在几个集群中。在某个时候,我有 6 个,然后是 36,然后是 176,今天达到了 304。从 176 前进到 304 让我感到惊讶 --- 它们消失了一段时间,然后在显然是微不足道的变化之后又回来了,成倍增加。

标签: scala types warnings sbt existential-type


【解决方案1】:

这似乎是特定于 sbt 的,其中关于类型的假设不正确并发出警告。当 sbt 需要从源文件中提取一些信息时,这段代码似乎会运行。

https://github.com/harrah/xsbt/blob/0.11/compile/interface/API.scala#L105

我的疯狂猜测是存在类型和类型投影的组合导致了这种情况。如果可以缩小范围,您可能希望将此报告为 sbt 问题。

【讨论】:

  • 谢谢,huynhjl,让我放心了。我怀疑我会投入很多时间,但如果我偶然发现一个小测试用例,我一定会贡献给 sbt。
【解决方案2】:

这是一个 SBT 问题:https://github.com/sbt/sbt/issues/830。 在 0.13.6 时,此消息的级别已从警告更改为日志。

还请查看 scala-internals 组中的相关讨论:https://groups.google.com/forum/#!msg/scala-internals/ANcaI6dVYPw/2Gt5z_S3Gc0J

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 2023-03-27
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多