راست از چندریختی با trait ها پشتیبانی میکنه. trait ها بهمون اجازه میدن یه مجموعه از متدها رو با یه نوع struct مرتبط کنیم.
اول امضای متدهای یه trait رو اینطوری تعریف میکنیم:
trait MyTrait {
fn foo(&self);
...
}
وقتی یه struct یه trait رو پیادهسازی میکنه، یه قرارداد برقرار میشه که بهمون اجازه میده بهشکل غیرمستقیم از طریق نوع trait (مثلاً &dyn MyTrait) با اون struct تعامل کنیم، بدون اینکه لازم باشه نوع واقعیش رو بدونیم.
متدهای trait که یه struct پیادهسازیشون کرده، توی یه بلوک پیادهسازی تعریف میشن:
impl MyTrait for MyStruct {
fn foo(&self) {
...
}
...
}