Обмеження трейту

При роботі з узагальненнями ви часто потребуєте, щоб типи реалізовували деякий трейт, щоб ви могли викликати методи цього трейту.

Ви можете зробити це за допомогою T: Trait:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

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) є некоректним.