Rust 为什么装箱变量需要显式类型才能传递给函数?

Rust 为什么装箱变量需要显式类型才能传递给函数?,rust,traits,box,Rust,Traits,Box,为什么需要显式类型才能进行编译?我希望编译器理解Box等于Box` 找到类型“%std::boxed::Box”` 在这种情况下,答案是不要像这样使用框。正如Stargateur在评论中所建议的那样,接下来的道路是: trait TTest{} 结构STest{} 为STest{}执行测试 fn foo(_测试:&dyn测试){} pub fn main(){ //嗯 设test1=STest{}; foo(和test1); } 例如,如果仍需要使用框将其存储在向量中,则应仅在严格需要时使用:

为什么需要显式类型才能进行编译?我希望编译器理解
Box
等于
Box`
找到类型“%std::boxed::Box”`

在这种情况下,答案是不要像这样使用
框。正如Stargateur在评论中所建议的那样,接下来的道路是:

trait TTest{}
结构STest{}
为STest{}执行测试
fn foo(_测试:&dyn测试){}
pub fn main(){
//嗯
设test1=STest{};
foo(和test1);
}
例如,如果仍需要使用
将其存储在向量中,则应仅在严格需要时使用:

fn添加测试(测试:框){
设mut-vec=vec!{};
矢量推力(试验);
}
// ...
添加_测试(Box::new(test1));

在这种情况下,答案是不要像这样使用
框。正如Stargateur在评论中所建议的那样,接下来的道路是:

trait TTest{}
结构STest{}
为STest{}执行测试
fn foo(_测试:&dyn测试){}
pub fn main(){
//嗯
设test1=STest{};
foo(和test1);
}
例如,如果仍需要使用
将其存储在向量中,则应仅在严格需要时使用:

fn添加测试(测试:框){
设mut-vec=vec!{};
矢量推力(试验);
}
// ...
添加_测试(Box::new(test1));

@Stargateur似乎我把数据存储和处理数据之间的界限弄乱了(因为我想将任何实现TTest的东西存储在向量中)。让我试着重构我的代码,使之在任何地方都使用
dyn TTest
,并且在与Vec交互时只使用盒式版本。@Stargateur似乎我有点搞乱了数据存储(因为我想在向量中存储实现TTest的任何东西)和处理数据之间的界限。让我试着重构我的代码,以便在任何地方都使用
dyn TTest
,并且在与Vec交互时只使用盒式版本。请注意,在您的情况下,最好避免动态调度。我的评论只是“这是谁应该编译代码”但是,如果您的类型在编译类型上是已知的,那么最好有一个编译时分派注意,在您的情况下,最好避免动态分派,我的注释只是“这里谁应该是要编译的代码”,但是如果您的类型在编译类型上是已知的,那么最好有一个编译时分派
error[E0308]: mismatched types
  --> mwe.rs:13:9
   |
13 |     foo(&test1);
   |         ^^^^^^ expected trait TTest, found struct `STest`
   |
   = note: expected type `&std::boxed::Box<(dyn TTest + 'static)>`
              found type `&std::boxed::Box<STest>`