Определение Result
является и всегда было следующим:
pub enum Result<T, E> {
Ok(T),
Err(E),
}
Это определение даже представлено в языке программирования Rust , чтобы показать, насколько это простоявляется.Как общий тип суммы результата OK и результата error , он всегда ожидает два параметра типа, и компилятор будет жаловаться, что не может их вывести, или список аргументов типа не делаетимеют ожидаемую длину.
С другой стороны, можно найти много библиотек и соответствующих документов, показывающих Result
с одним аргументом типа, как в Result<()>
.Что дает?
Это все еще не волшебство.По соглашению библиотеки создают псевдонимы типов для типов результатов на уровне ящика или модуля.Это работает довольно хорошо, потому что те, кто обычно выдает ошибки одного и того же локально созданного типа.
pub type Result<T> = Result<T, Error>;
На самом деле, это настолько распространено, что ящик error-chain
,один из множества вспомогательных ящиков типа ошибки автоматически создает это определение при использовании макроса error_chain!
.Таким образом, если вы находитесь в проекте, использующем error-chain
(, например, wifi-connect
), или используете библиотеку, которая может использовать или не использовать error-chain
, вы должны предположить, что упоминание Result<T>
- псевдонимы локального типа для доменного Result<T, Error>
.В случае сомнений, щелкнув по этому типу на сгенерированных страницах документации, вы перейдете к конкретному определению (в данном случае к псевдониму).