枚举不编译-“方法值需要结果类型,因为它的右侧尝试隐式搜索”

问题描述 投票:0回答:1

我在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提供了正确的返回类型。还是我将“结果类型”解释为错误?

任何帮助将不胜感激。

scala enums implicit dotty
1个回答
0
投票
**我现在接受这个答案,但是我很乐意接受任何更详细地说明问题原因的答案,因为在这里,我只是写下我为解决此问题所做的工作其他具有相同的公关

这在0.24.0-RC1中的修复中也不起作用,但是确实做了一些小的调整(尽管我不确定为什么会这样)。原来这不是Dotty的错误,只是我做过的愚蠢的事情。

我具有特征TokenType及其子项SymbolTokenTypeKeywordTokenType等,并且还有TokenType中的对象TokenType.scala。在同伴对象TokenType中,我具有以下导出语句,因此可以一次导入所有不同的TokenType用例:

export com.blah.SymbolTokenType._ export com.blah.KeywordTokenType._

删除导出语句解决了它,尽管我不确定为什么,因为在TokenType.scala中没有import TokenType._之类的东西。从同伴对象导出的SymbolTokenType的所有值都不应在SymbolTokenType内部或包com.blah内部可见。

一旦将伴随对象TokenType移动到一个单独的文件(位于同一包中,则它神奇地又开始工作了。

© www.soinside.com 2019 - 2024. All rights reserved.