Параметры типа в функциях и методах: универсальный . Это означает, что для всех реализаций признака Trait::method<T>
должен быть реализован для любого T
с точно такими же ограничениями, которые указаны в признаке (в этом случае ограничение на T
является только неявным Sized
).
Указанное вами сообщение об ошибке компилятора предполагает, что он все еще ожидает тип параметра T
. Вместо этого ваша реализация Struct
предполагает, что T = u8
, что неверно. Параметр типа определяется вызывающим методом, а не разработчиком, поэтому T
не всегда может быть u8
.
Если вы хотите, чтобы разработчик выбрал конкретный тип, он должен быть материализован в связанном типе.
trait Trait {
type Output;
fn method(&self) -> Self::Output;
}
struct Struct;
impl Trait for Struct {
type Output = u8;
fn method(&self) -> u8 {
16
}
}
Прочтите также этот раздел Язык программирования Rust : Указание типов заполнителей в определениях признаков со связанными типами .
Смотри также: