Объясните механизм: почему точечный вызов метода может найти реализацию трейта для ссылки на значение, хотя исходное выражение имеет тип самого значения?
База Hintsage
Traits и generics
Traits, bounds, generics, associated types и dispatch.
Практика
Вопросы: Traits и generics
Ваша обёртка должна реализовывать трейт только при выполнении bound внутренним типом. Как Rust определяет доступность такой реализации при вызове метода?
Две разные функции возвращают impl Trait с одинаковыми bounds. Совместимы ли их скрытые типы?
Как приём self по значению влияет на совместимость метода с dyn Trait и возможность его вызова?
При создании trait object для трейта с параметром типа как Rust определяет, какой тип параметра закреплён за объектом, и почему один такой объект не может обслуживать разные типы параметра?
Как отсутствие параметра self у ассоциированной функции влияет на её вызов через dyn Trait?
При проектировании структуры нужно скрыть конкретный тип поля за трейт-границей. Почему impl Trait нельзя использовать для этого напрямую?
Как правило вывода времени жизни различает Box<dyn Trait> и &dyn Trait без явного lifetime-bound?
В API объект должен поддерживать оба независимых трейта. Разберите, допустим ли такой trait object и как выразить эту границу корректно:
trait Readable {
fn read(&self) -> String;
}
trait Writable {
fn write(&mut self, data: &str);
}
fn process(value: &mut (dyn Readable + Writable)) {
value.write("data");
println!("{}", value.read());
}
Показано 41–49 из 49