Обмеження трейту
При роботі з узагальненнями ви часто потребуєте, щоб типи реалізовували деякий трейт, щоб ви могли викликати методи цього трейту.
Ви можете зробити це за допомогою T: Trait:
fn duplicate<T: Clone>(a: T) -> (T, T) { (a.clone(), a.clone()) } // struct NotCloneable; fn main() { let foo = String::from("foo"); let pair = duplicate(foo); println!("{pair:?}"); }
This slide should take about 8 minutes. 
                    - 
Спробуйте зробити
NonCloneableі передати його вduplicate. - 
Якщо потрібно вказати декілька трейтів, використовуйте
+, щоб об’єднати їх. - 
Покажіть вираз
where, студенти зустрінуться з ним під час читання коду.fn duplicate<T>(a: T) -> (T, T) where T: Clone, { (a.clone(), a.clone()) }- Це розчищає сигнатуру функції, якщо у вас багато параметрів.
 - Він має додаткові функції, що робить його більш потужним.
- Якщо хтось запитає, додаткова можливість полягає в тому, що тип ліворуч від “:” може бути довільним, наприклад 
Option<T>. 
 - Якщо хтось запитає, додаткова можливість полягає в тому, що тип ліворуч від “:” може бути довільним, наприклад 
 
 - 
Зауважте, що Rust (поки що) не підтримує спеціалізацію. Наприклад, за наявності оригінального
duplicateдодавання спеціалізованогоduplicate(a: u32)є некоректним.