Re: Интерфейс и несколько реализаций
От: johny5 Новая Зеландия
Дата: 14.11.22 09:16
Оценка: 10 (1)
Здравствуйте, 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&amp;mode=debug&amp;edition=2021&amp;gist=b9b4006945a68782202ecb71de396aa3
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.