我在GitHub上放置了bug report,但事实证明,这毕竟不是dotc生成枚举的方式中的错误。
我在我的一个项目中尝试了Dotty的枚举,并且一切都很好,直到有一天我开始出现错误method values needs result type because its right-hand side attempts implicit search ... To avoid this error, give 'method values' an explicit type.
起初,我可以通过在sbt clean
之前运行compile
来摆脱这种情况,但是我最近将枚举移到了一个新模块上,现在预先运行clean
并不会使错误消失。
我不知道为什么会这样,因为我还没有更改Dotty版本(0.22.0),只是将文件移到某个位置应该对任何东西都没有影响。我一直无法在网上找到任何类似的问题,而且我也不认为Dotty编译器生成没有返回类型的方法是一个错误,因为我在枚举SymbolTokenType
下编写了此代码:
object SymbolTokenType {
def values: Array[SymbolTokenType] = ???
}
并且我得到一个错误,说已经定义了具有相同签名的方法,这意味着dotc does为方法values
提供了正确的返回类型。还是我将“结果类型”解释为错误?
任何帮助将不胜感激。
这在0.24.0-RC1中的修复中也不起作用,但是确实做了一些小的调整(尽管我不确定为什么会这样)。原来这不是Dotty的错误,只是我做过的愚蠢的事情。
我具有特征TokenType
及其子项SymbolTokenType
,KeywordTokenType
等,并且还有TokenType
中的对象TokenType.scala
。在同伴对象TokenType
中,我具有以下导出语句,因此可以一次导入所有不同的TokenType
用例:
export com.blah.SymbolTokenType._
export com.blah.KeywordTokenType._
删除导出语句解决了它,尽管我不确定为什么,因为在TokenType.scala中没有import TokenType._
之类的东西。从同伴对象导出的SymbolTokenType
的所有值都不应在SymbolTokenType
内部或包com.blah
内部可见。一旦将伴随对象
TokenType
移动到一个单独的文件(位于同一包中,则它神奇地又开始工作了。