Здравствуйте, vaa, Вы писали:
vaa>В F# есть такая возможность, определить типа наподобие интерфейса и указывать различные реализации
vaa>vaa>type Db<'a> = { Save : 'a -> unit } // <=!!!
vaa>let mock = { Db.Save = fun (x:string) -> printfn $"{x} is saved" }
vaa>mock.Save "ok"
vaa>
vaa>Пробовал аналогично определить поле в структуре раста, но не получается.
vaa>Принципиально не возможно? Как тогда гибко менять реализации в расте?
Помоему идёт речь о trait?
trait Db {
fn save(&self, x : &str);
}
fn use_trait<T : Db>(val : &T)
{
val.save("value");
}
struct Mock {
}
impl Db for Mock {
fn save(&self, val :&str) {
println!("{val} is saved");
}
}
fn main() {
let mock = Mock {};
use_trait(&mock);
}
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b9b4006945a68782202ecb71de396aa3