Вы можете объявить переменную типа для блока impl
, только если она используется в самом типе.
Однако вы можете также вводить новые переменные типа для отдельных методов:
impl S {
fn do_something<T>(value: T) {
//do something
}
}
Это особенно характерно для аргументов, которые являются замыканиями, поскольку каждое замыкание имеет свой тип, поэтому вам необходимо иметь возможность каждый раз вызывать метод с другим замыканием. Например, Iterator::map
определяется следующим образом:
fn map<B, F>(self, f: F) -> Map<Self, F>
where
F: FnMut(Self::Item) -> B,
Если бы F
был объявлен для типа вместо метода, вам пришлось бы использовать одно и то же закрытие каждый раз, когда вы вызываете map
- не очень полезно.