Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. // В расте нет ООП, тут чутка другая система, но смысл тот же
  2.  
  3. trait Animal { // В ООП это был бы класс-родитель с абстрактным методом
  4. fn lick_balls(&self);
  5. }
  6.  
  7. struct Cat { // Класс кота
  8. }
  9.  
  10. impl Animal for Cat { // "Наследуем" класс кота от класса животного, объявляем реализацию метода
  11. fn lick_balls(&self) {
  12. println!("Я кот я яйца лижу");
  13. }
  14. }
  15.  
  16. struct Dog { // Класс пса
  17. }
  18.  
  19. impl Animal for Dog { // То же для пса
  20. fn lick_balls(&self) {
  21. println!("Я пёс я яйца лижу");
  22. }
  23. }
  24.  
  25. fn main() {
  26. let cat = Cat {}; // Создаём объект кота
  27. let dog = Dog {}; // И пса
  28. lick_balls(cat); // Вызываем одну и ту же функцию, но с разными параметрами
  29. lick_balls(dog); // И при этом имеем всего одну реализацию функции
  30. }
  31.  
  32. fn lick_balls(animal: impl Animal) { // Функция принимает на вход класс животного
  33. animal.lick_balls(); // Вызывается метод класса животного, который гарантированно должен быть объявлен, так что всё компилится и чики-пуки
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement