Dans Rust 1.27. une nouvelle syntaxe est introduite - le mot clé dyn
a été ajouté.
// old => new
Box<Foo> => Box<dyn Foo>
&Foo => &dyn Foo
&mut Foo => &mut dyn Foo
Que fait-il réellement et pourquoi a-t-il été ajouté?
Cela permet de différencier les traits/objets de traits et les structures; &Foo
, Box<Foo>
et impl Bar for Foo
étaient ambigus, car dans chacun d'eux Foo
aurait pu être un trait ou une structure.
Avec l'ajout de dyn
, cela n'est plus ambigu, car les traits sont distingués par le mot clé dyn
:
// trait objects (new dyn syntax)
&Foo => &dyn Foo
&mut Foo => &mut dyn Foo
Box<Foo> => Box<dyn Foo>
// structs (no change)
&Bar
&mut Bar
Box<Bar>