Enum не компилируется - «значениям метода нужен тип результата, потому что его правая часть пытается выполнить неявный поиск» - PullRequest
0 голосов
/ 25 апреля 2020

Я поместил отчет об ошибке на GitHub, но оказалось, что это не ошибка в том смысле, что точка c все-таки генерирует перечисления.

Я пробовал Дотти перечисляет в моем проекте, и все шло хорошо, пока однажды я не начал получать ошибку 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, но Я недавно переместил свой enum в новый модуль, и теперь запуск clean заранее не устраняет ошибку go.

Я понятия не имею, почему это происходит, так как я не изменил свою Dotty версия (0.22.0) и просто перемещение файла куда-то не должно ни на что влиять. Я не смог найти подобных проблем в сети, и я не думаю, что это ошибка компилятора Dotty, генерирующего метод без возвращаемого типа, так как я написал это ниже моего enum SymbolTokenType:

object SymbolTokenType {
  def values: Array[SymbolTokenType] = ???
}

и я получил сообщение о том, что метод с такой же сигнатурой уже определен, что означает, что точка c действительно дает правильный тип возврата для метода values. Или я неправильно интерпретирую "тип результата"?

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 апреля 2020

Я принимаю этот ответ на данный момент, но я с радостью приму любой ответ, который более подробно расскажет о причине проблемы, поскольку здесь я просто записываю, что я сделал, чтобы исправить ее в в случае, если у кого-то еще есть такая же проблема

Это не будет работать с fix в 0.24.0-RC1, но оно начало работать с небольшой настройкой (хотя я Я не уверен, почему именно). Оказывается, это не ошибка Дотти, просто глупость, которую я сделал.

У меня была черта TokenType и ее потомков SymbolTokenType, KeywordTokenType и др. c. а также объект TokenType в TokenType.scala. Внутри объекта-компаньона TokenType у меня были следующие операторы экспорта, чтобы я мог импортировать сразу все различные TokenType случаи:

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

Удаление операторов экспорта решило эту проблему, хотя я не уверен именно поэтому, потому что у меня не было ничего подобного import TokenType._ внутри TokenType. scala. Все значения SymbolTokenType, которые были экспортированы из объекта-компаньона, не должны были быть видны внутри SymbolTokenType или внутри пакета com.blah.

После того, как я переместил объект-компаньон TokenType в отдельный объект файл (в том же пакете), он волшебным образом снова начал работать, хотя.

...