关于rust:为什么引入dyn语法?

Why was the dyn syntax introduced?

本问题已经有最佳答案,请猛点这里访问。

在Rust 1.27.0中,引入了新语法-添加了dyn关键字。

1
2
3
4
  // old => new
  Box<Foo> => Box<dyn Foo>
  &Foo => &dyn Foo
  &mut Foo => &mut dyn Foo

它实际上是做什么的,为什么要添加?


这有助于区分特征/特征对象和结构; &FooBoximpl Bar for Foo模棱两可,因为在所有的Foo中,它们可能都是特征或结构。

添加dyn不再是模棱两可的,因为特征通过dyn关键字进行区分:

1
2
3
4
5
6
7
8
9
// 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>

  • 在任何情况下特质都不应获得dyn
  • @NicHartley,仅当它们不用作特征对象时; 否则,不会。