Методи
Rust дозволяє пов’язувати функції з новими типами. Ви робите це за допомогою блоку impl
:
Аргументи self
визначають “отримувача” - об’єкт, на який діє метод. Існує декілька типових отримувачів для методу:
&self
: запозичує об’єкт у викликувача за допомогою спільного та незмінного посилання. Після цього об’єкт можна використовувати знову.&mut self
: запозичує об’єкт у викликувача, використовуючи унікальне та мутабельне посилання. Після цього об’єкт можна використовувати знову.self
: приймає право власності на об’єкт і переміщує його від викликувача. Метод стає власником об’єкта. Об’єкт буде видалено (звільнено), коли метод завершиться, якщо володіння їм не передано явно. Повне володіння не означає автоматичної мутабельності.mut self
: те саме, що й вище, але метод може змінювати об’єкт.- Немає отримувача: це стає статичним методом у структурі. Зазвичай використовується для створення конструкторів, які за домовленістю називаються
new
.
Speaker Notes
This slide should take about 8 minutes.
Ключові моменти:
- Може бути корисно представити методи, порівнюючи їх із функціями.
- Методи викликаються для екземпляра типу (такі як структура або перелік), перший параметр представляє екземпляр як
self
. - Розробники можуть використовувати методи, щоб скористатися перевагами синтаксису отримувача методів і допомогти їм бути більш організованими. Використовуючи методи, ми можемо зберігати весь код реалізації в одному передбачуваному місці.
- Методи викликаються для екземпляра типу (такі як структура або перелік), перший параметр представляє екземпляр як
- Зверніть увагу на використання ключового слова
self
, отримувача методу.- Покажіть, що це скорочений термін для
self: Self
і, можливо, покажіть, як можна також використовувати назву структури. - Поясніть, що
Self
— це псевдонім типу для типу, до якого входить блокimpl
, і його можна використовувати деінде в блоці. - Зауважте, що
self
використовується, як і інші структури, і крапкова нотація може використовуватися для посилання на окремі поля. - Це може бути гарний час, щоб продемонструвати, чим
&self
відрізняється відself
, спробувавши запуститиfinish
двічі. - Окрім варіантів
self
, існують також спеціальні типи обгорток, які можуть бути типами отримувачів, наприкладBox<Self>
.
- Покажіть, що це скорочений термін для