Traits και κοινή συμπεριφορά
Ορίστε κοινή συμπεριφορά μεταξύ τύπων με δηλώσεις και υλοποιήσεις trait.
Traits και κοινή συμπεριφορά
Τα traits ορίζουν κοινά interfaces που μπορούν να υλοποιηθούν από πολλαπλούς τύπους. Αποτελούν τον μηχανισμό της Sounio για φραγμένο πολυμορφισμό (bounded polymorphism) — μια συνάρτηση μπορεί να απαιτεί ο παράμετρος τύπου της να υλοποιεί ένα συγκεκριμένο trait.
Δήλωση trait
trait Printable {
fn to_string(self) -> str
}
trait Measurable {
fn magnitude(self) -> f64
}
Υλοποίηση trait
struct Point { x: f64, y: f64 }
impl Printable for Point {
fn to_string(self) -> str {
format("({}, {})", self.x, self.y)
}
}
impl Measurable for Point {
fn magnitude(self) -> f64 {
sqrt(self.x * self.x + self.y * self.y)
}
}
Trait bounds
Χρησιμοποιήστε trait bounds για να περιορίσετε γενικευμένες παραμέτρους τύπου:
fn display<T: Printable>(value: T) with IO {
println(value.to_string())
}
fn compare_magnitudes<T: Measurable>(a: T, b: T) -> bool {
a.magnitude() > b.magnitude()
}
Πού βρίσκεται ο έλεγχος traits
Η επίλυση traits υλοποιείται στο self-hosted/check/traits.sio. Ο ελεγκτής επαληθεύει ότι:
- Κάθε block
implπαρέχει όλες τις απαιτούμενες μεθόδους. - Οι υπογραφές μεθόδων στο
implταιριάζουν με τη δήλωση του trait. - Τα trait bounds στα σημεία κλήσης ικανοποιούνται από τον συγκεκριμένο τύπο.
Τρέχουσα κατάσταση
Οι δηλώσεις, υλοποιήσεις και απλά bounds των traits υποστηρίζονται από τον τρέχοντα parser και ελεγκτή τύπων. Πιο προχωρημένα χαρακτηριστικά (associated types, default methods, κληρονομικότητα traits) παρακολουθούνται στη σελίδα κατάστασης δυνατοτήτων.