Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // В расте нет ООП, тут чутка другая система, но смысл тот же
- trait Animal { // В ООП это был бы класс-родитель с абстрактным методом
- fn lick_balls(&self);
- }
- struct Cat { // Класс кота
- }
- impl Animal for Cat { // "Наследуем" класс кота от класса животного, объявляем реализацию метода
- fn lick_balls(&self) {
- println!("Я кот я яйца лижу");
- }
- }
- struct Dog { // Класс пса
- }
- impl Animal for Dog { // То же для пса
- fn lick_balls(&self) {
- println!("Я пёс я яйца лижу");
- }
- }
- fn main() {
- let cat = Cat {}; // Создаём объект кота
- let dog = Dog {}; // И пса
- lick_balls(cat); // Вызываем одну и ту же функцию, но с разными параметрами
- lick_balls(dog); // И при этом имеем всего одну реализацию функции
- }
- fn lick_balls(animal: impl Animal) { // Функция принимает на вход класс животного
- animal.lick_balls(); // Вызывается метод класса животного, который гарантированно должен быть объявлен, так что всё компилится и чики-пуки
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement