Herencia y composición de rasgos en Rust

RustRustBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploramos cómo definir rasgos en Rust como superconjuntos de otros rasgos, lo que permite la implementación de múltiples rasgos a través de subtipos.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/traits("Traits") subgraph Lab Skills rust/function_syntax -.-> lab-99221{{"Herencia y composición de rasgos en Rust"}} rust/expressions_statements -.-> lab-99221{{"Herencia y composición de rasgos en Rust"}} rust/method_syntax -.-> lab-99221{{"Herencia y composición de rasgos en Rust"}} rust/traits -.-> lab-99221{{"Herencia y composición de rasgos en Rust"}} end

Superrasgos

Rust no tiene "herencia", pero puede definir un rasgo como un superconjunto de otro rasgo. Por ejemplo:

trait Person {
    fn name(&self) -> String;
}

// Person es un superrasgo de Student.
// Implementar Student requiere que también implementes Person.
trait Student: Person {
    fn university(&self) -> String;
}

trait Programmer {
    fn fav_language(&self) -> String;
}

// CompSciStudent (estudiante de informática) es un subtipo de tanto Programmer
// como Student. Implementar CompSciStudent requiere que implementes ambos superrasgos.
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() {}

Resumen

¡Felicitaciones! Has completado el laboratorio de Superrasgos. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.