Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax 为什么引入dyn语法?_Syntax_Rust_Keyword - Fatal编程技术网

Syntax 为什么引入dyn语法?

Syntax 为什么引入dyn语法?,syntax,rust,keyword,Syntax,Rust,Keyword,在一个新的语法中,引入了dyn关键字 // old => new Box<Foo> => Box<dyn Foo> &Foo => &dyn Foo &mut Foo => &mut dyn Foo //旧=>新 Box=>Box &Foo=>&动态Foo &mut Foo=>&mut dyn Foo 它实际上是做什么的?为什么要添加它?这有助于区分特征/特征对象和结构&Foo、Box和impl-

在一个新的语法中,引入了
dyn
关键字

  // old => new
  Box<Foo> => Box<dyn Foo>
  &Foo => &dyn Foo
  &mut Foo => &mut dyn Foo
//旧=>新
Box=>Box
&Foo=>&动态Foo
&mut Foo=>&mut dyn Foo

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

这有助于区分特征/特征对象和结构<代码>&Foo、
Box
impl-Bar for Foo
都是模棱两可的,因为在它们中
Foo
可能是一个特征或结构

添加
dyn
后,这不再是模棱两可的,因为特征通过
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>
//trait对象(新的dyn语法)
&Foo=>&动态Foo
&mut Foo=>&mut dyn Foo
Box=>Box
//结构(无更改)
&酒吧
&变杆
盒子

是否有任何情况下,只有当特征不被用作特征对象时,特征才不应获得
dyn
?@NicHartley;否则,不会。