Узагальнені функції
Rust підтримує узагальнені типи, що дозволяє абстрагувати алгоритми або структури даних (наприклад, сортування або бінарне дерево) від типів, що використовуються або зберігаються.
Speaker Notes
This slide should take about 5 minutes.
-
Rust визначає тип для T на основі типів аргументів та значення, що повертається.
-
У цьому прикладі ми використовуємо лише примітивні типи
i32
та&str
дляT
, але ми можемо використовувати будь-який тип, включаючи типи, визначені користувачем:struct Foo { val: u8, } pick(123, Foo { val: 7 }, Foo { val: 456 });
-
Це схоже на шаблони C++, але Rust частково компілює узагальнену функцію одразу, тому ця функція має бути валідною для всіх типів, що відповідають обмеженням. Наприклад, спробуйте модифікувати
pick
так, щоб вона поверталаeven + odd
, якщоn == 0
. Навіть якщо використовується лише екземплярpick
з цілими числами, Rust все одно вважатиме його невірним. C++ дозволить вам зробити це. -
Узагальнений код перетворюється на не-узагальнений на основі сайтів виклику. Це абстракція з нульовою вартістю: ви отримуєте точно такий же результат, як якщо б ви написали структури даних власноруч без абстракції.