Поліморфні типи. Работают на compile-time з monomorphization.
fn largest(list: &[T]) -> T {
let mut largest = list[0];
for &item in list {
if item > largest {
largest = item;
}
}
largest
}
let numbers = vec![34, 50, 25, 100, 65];
println!("{}", largest(&numbers)); // 100
Інтерфейс, який визначає набір методів. Як interface у Java/Go.
trait Summary {
fn summarize(&self) -> String;
fn author(&self) -> String; // без реалізації
}
struct Article {
title: String,
author: String,
}
impl Summary for Article {
fn summarize(&self) -> String {
format!("{} by {}", self.title, self.author)
}
fn author(&self) -> String {
self.author.clone()
}
}
fn print_summary(item: &T) {
println!("Breaking news: {}", item.summarize());
}
fn print_summaries(item: &T) {
// T мусить мати як Summary так і Display
}
// Альтернативна синтаксис
fn print_it(item: &impl Summary) {
println!("{}", item.summarize());
}
#[derive(Debug, Clone, PartialEq)]
struct Person {
name: String,
age: u32,
}
let p1 = Person { name: "Alice".into(), age: 30 };
let p2 = p1.clone();
println!("{:?}", p2); // Debug output
Лекція 20: Многопотоковість (Multithreading)
Дякую за увагу! 💾