Может rustc дать мне более подробно об ошибках типа неоднозначности? - PullRequest
0 голосов
/ 22 сентября 2019

Есть такая знакомая ошибка компиляции:

error[E0283]: type annotations required: cannot resolve `T: Constraint`

...

А потом rustc --explain E0283 говорит: This error occurs when the compiler doesn't have enough information to unambiguously choose an implementation и дает полезный пример .

Я знаюкак именно исправить ошибку - см. например этот ответ .

Мне интересно, однако, можно ли побудить rustc рассказать мне больше.В частности, некоторое представление пространства возможных конкретных типов, с которыми проверка типов закончилась перед освобождением.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Когда средство проверки типов не может вывести однозначный тип, это не обязательно означает, что он не может выбирать из некоторого конечного набора известных претендентов. Вот пример , на который вы ссылаетесь из документации:

trait Generator {
    fn create() -> u32;
}

struct Impl;

impl Generator for Impl {
    fn create() -> u32 { 1 }
}

struct AnotherImpl;

impl Generator for AnotherImpl {
    fn create() -> u32 { 2 }
}

fn main() {
    let cont: u32 = Generator::create();
    // error, impossible to choose one of Generator trait implementation
    // Should it be Impl or AnotherImpl, maybe something else?
}

Если AnotherImpl не было и Impl была только реализациейиз Generator, это все равно не сработает.Если это так, вы можете позже добавить AnotherImpl - даже в другой модуль или ящик - и сломать этот код.В общем, добавление нового определения должно быть неразрывным и, конечно, не должно быть в состоянии нарушить код в другом модуле.Если компилятор автоматически выберет «единственную» реализацию Generator здесь, это нарушит это.

Возвращаясь к исходному вопросу, единственная информация, которую может дать вам сообщение об ошибке, это почти то, что уже есть.давая вам.Проверка типов не искала возможные реализации, а просто отказалась даже пытаться выбрать тип из представленной информации.

1 голос
/ 22 сентября 2019

Я не могу найти какие-либо опции rustc для предоставления дополнительной информации по E0283;однако код этой ошибки содержит комментарий, который может дать вам немного больше понимания.В противном случае кажется, что ответ на ваш вопрос - нет.Извините, я не могу получить больше помощи.

...