Supertraits

Rust doesn't have "inheritance", but you can define a trait as being a superset of another trait. For example:

trait Person {

fn name(&self) -> String;

}

// Person is a supertrait of Student.

// Implementing Student requires you to also impl Person.

trait Student: Person {

fn university(&self) -> String;

}

trait Programmer {

fn fav_language(&self) -> String;

}

// CompSciStudent (computer science student) is a subtrait of both Programmer

// and Student. Implementing CompSciStudent requires you to impl both supertraits.

trait CompSciStudent: Programmer + Student {

fn git_username(&self) -> String;

}

fn comp_sci_student_greeting(student: &dyn CompSciStudent) -> String {

format!(

"My name is {} and I attend {}. My favorite language is {}. My Git username is {}",

student.name(),

student.university(),

student.fav_language(),

student.git_username()

)

}

fn main() {}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

See also:

The Rust Programming Language chapter on supertraits

Загрузка...