База Hintsage

Traits и generics

Traits, bounds, generics, associated types и dispatch.

Практика

Вопросы: Traits и generics

Определите результат вызовов: какой метод выбирается через точечный синтаксис, если у типа есть одноимённый inherent-метод и реализация трейта?

trait Render {
    fn draw(&self) -> &'static str;
}

struct Button;

impl Button {
    fn draw(&self) -> &'static str { "inherent" }
}

impl Render for Button {
    fn draw(&self) -> &'static str { "trait" }
}

fn main() {
    let button = Button;
    println!("{}", button.draw());
    println!("{}", Render::draw(&button));
}

При вызове метода с одинаковым именем из двух трейтов определите результат компиляции и способ явно выбрать реализацию.

trait Fast {
    fn run(&self) -> &'static str;
}

trait Safe {
    fn run(&self) -> &'static str;
}

struct Job;

impl Fast for Job {
    fn run(&self) -> &'static str { "fast" }
}

impl Safe for Job {
    fn run(&self) -> &'static str { "safe" }
}

fn main() {
    println!("{}", Job.run());
}
Программирование RustTraits и genericsРазработчик Rust среднего уровня

Нужно описать итератор, который возвращает ссылку на данные внутри самого итератора. Какую роль играет параметр 'a у ассоциированного типа Item?

trait LendingIterator {
    type Item<'a>
    where
        Self: 'a;

    fn next<'a>(&'a mut self) -> Option<Self::Item<'a>>;
}

struct One {
    value: String,
    yielded: bool,
}
Программирование RustTraits и genericsРазработчик Rust библиотек

Показано 2140 из 49