Что такое расходящаяся ошибка неявного раскрытия?

StackOverflow https://stackoverflow.com/questions/4883906

  •  28-10-2019
  •  | 
  •  

Вопрос

При попытке найти решение другого вопроса ( [1] ) Я обнаружил отклоняющуюся ошибку неявного раскрытия.Я ищу объяснение, что это значит

Вот пример использования:

родовое слово
Это было полезно?

Решение

Если вы запустите это в scala с переданным аргументом -Xlog-implicits, вы получите дополнительную информацию:

<цитата>

scala.this.Prefed.conforms не является допустимым неявным значением для (T)=> Ordered [T], потому что:

несоответствие типа:

найдено: <: <[T, T]

обязательно: (T)=> Заказано [T]

scala.this.predef.conforms не является допустимым неявным значением для (Ordered [T])=> Ordered [Ordered [T]], потому что:

несоответствие типа:

найдено: <: <[Заказано [T], Заказано [T]]

обязательно: (Заказано [T])=> Заказано [Заказано [T]]

math.this.Ordering.ordered не является допустимым неявным значением для Ordering [T], потому что:

аргументы типа [T] не соответствуют границам параметра типа упорядоченного метода [A <: scala.math.Ordered [A]]

Это в основном предположения, но, похоже, в них есть смысл. Я постараюсь исследовать дальше:

Это наводит на мысль, что здесь рассматриваются три имплицита. В конечном счете, подпись sorted требует, чтобы он нашел что-то типа Ordering[T]. Итак, он пытается построить вашу неявную функцию ordering. Во-первых, он пытается заполнить код conv, находя неявный код (T) => Ordered[T] типа, где он выполняет поиск в Predef, что похоже на поиск неправильного дерева. Затем он пытается найти неявный для (Ordered[T]) => Ordered[Ordered[T]] в том же месте, поскольку by принимает неявный параметр типа Ordering[S], где S - это Ordered[T] на основе conv. Таким образом, он не может создать общий кодовый тег.

Затем он пытается использовать ordering в math.Ordering, но это тоже не подходит. Однако я думаю, что это то, что дает несколько сбивающее с толку сообщение о «расходящихся имплицитах». Проблема не в том, что они расходятся, а в том, что нет подходящего по охвату, а сбивает с толку тот факт, что есть два пути, по которым можно спуститься. Если кто-то пытается определить ordering без неявной упорядоченной функции, он терпит неудачу с простым сообщением о том, что не может найти подходящий неявный.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top