LINUX.ORG.RU

История изменений

Исправление FishHook, (текущая версия) :

Кроме того, есть ли в Rust наследование traits? Типа generic_io_device с наследниками serial_io_device и block_io_device.

Если я правильно врубился в раст, вы имплементируете поведение для трейта, а не наследуете, но для конкретных структур это работает как если бы это было наследование


trait Device {
    fn write(&self) {
        println!("Write to device")
    }
}

struct MyDevice;

impl Device for MyDevice {}

trait BlockDevice {}

impl<T> Device for T where T: BlockDevice {
    fn write(&self) {
        println!("Write to block device")
    }
}

struct MyBlockDevice;

impl BlockDevice for MyBlockDevice {
    
}

fn main() {
    let d1 = MyBlockDevice;
    let d2 = MyDevice;
    let devices: Vec<&dyn Device> = vec![&d1, &d2];
    for d in devices {
        d.write()
    }
}

Исходная версия FishHook, :

Кроме того, есть ли в Rust наследование traits? Типа generic_io_device с наследниками serial_io_device и block_io_device. Если я правильно врубился в раст, вы имплементируете поведение для трейта, а не наследуете, но для конкретных структур это работает как если бы это было наследование


trait Device {
    fn write(&self) {
        println!("Write to device")
    }
}

struct MyDevice;

impl Device for MyDevice {}

trait BlockDevice {}

impl<T> Device for T where T: BlockDevice {
    fn write(&self) {
        println!("Write to block device")
    }
}

struct MyBlockDevice;

impl BlockDevice for MyBlockDevice {
    
}

fn main() {
    let d1 = MyBlockDevice;
    let d2 = MyDevice;
    let devices: Vec<&dyn Device> = vec![&d1, &d2];
    for d in devices {
        d.write()
    }
}