В вашем примере нет никакой связи между Item1
и Item2
. И дженерики Rusts не типизированы по типу утки, как шаблоны C ++ или функции Python.
Если вы хотите, чтобы функция работала с несколькими типами, обычно нужно сделать ее универсальной и иметь некоторую черту, определяющую, что общего у этих типов:
trait HasA {
fn get_a(&self) -> u8;
}
impl HasA for Item1 {
fn get_a(&self) -> u8 {
self.a
}
}
impl HasA for Item2 {
fn get_a(&self) -> u8 {
self.a
}
}
fn some_helper_function<T: HasA>(item: T) {
println!("The value of `item.a` is {}", item.get_a());
}
Было предложение , чтобы иметь поля для черт, которые позволили бы вам использовать item.a
из универсального (вам все равно придется реализовать черту для каждого типа). Но это было отложено. Похоже, что это предложение принесло слишком мало пользы и некоторые вопросы остались нерешенными и что оно не рассматривалось в качестве приоритета.