Η μεταφραστική κάλυψη είναι μερική. Για την πλήρη τεχνική αναφορά συμβουλευτείτε την αγγλική πηγή. Δείτε την αγγλική έκδοση →

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) παρακολουθούνται στη σελίδα κατάστασης δυνατοτήτων.