Информация об изменениях

Сообщение Re[3]: Интерфейс и несколько реализаций от 14.11.2022 10:34

Изменено 14.11.2022 10:34 DarkEld3r

Re[3]: Интерфейс и несколько реализаций
Здравствуйте, vaa, Вы писали:

vaa>Немного не то, тут получается отдельная структура, а как в структуру положить функцию(как поле)?


Не знаю F#, поэтому не уверен, что правильно понял фрагмент кода, но положить "интерфейс" в структуру в расте можно. Или как дженерик или как трейт-объект:
trait Save {
    fn save(&self);
}

struct Db1<T: Save> {
    save: T,
}

struct Db2 {
    save: Box<dyn Save>,
}

struct SomeSaveImpl {}

impl Save for SomeSaveImpl {
    fn save(&self) {
        println!("save");
    }
}

fn main() {
    let db1 = Db1 {
        save: SomeSaveImpl {},
    };
    db1.save.save();

    let db2 = Db2 {
        save: Box::new(SomeSaveImpl {}),
    };
    db2.save.save();
}

Можно и не объявлять трейт, а тоже использовать функцию:
Re[3]: Интерфейс и несколько реализаций
Здравствуйте, vaa, Вы писали:

vaa>Немного не то, тут получается отдельная структура, а как в структуру положить функцию(как поле)?


Не знаю F#, поэтому не уверен, что правильно понял фрагмент кода, но положить "интерфейс" в структуру в расте можно. Или как дженерик или как трейт-объект:
trait Save {
    fn save(&self);
}

struct Db1<T: Save> {
    save: T,
}

struct Db2 {
    save: Box<dyn Save>,
}

struct SomeSaveImpl {}

impl Save for SomeSaveImpl {
    fn save(&self) {
        println!("save");
    }
}

fn main() {
    let db1 = Db1 {
        save: SomeSaveImpl {},
    };
    db1.save.save();

    let db2 = Db2 {
        save: Box::new(SomeSaveImpl {}),
    };
    db2.save.save();
}

Можно и не объявлять трейт, а тоже использовать функцию.