最近我一直在学习高级的Rust技术。其中,我正在学习使用动态分发。
在我的尝试过程中,我遇到了一个问题。由于某种原因,我似乎无法访问使用Boxes和动态分发赋值给变量的结构体的字段。例如:
fn main() {
let z: Box<dyn S>;
z = Box::new(A::new());
println!("{}", z.val);
}
trait S {
fn new () -> Self where Self: Sized;
}
struct A {
val: i32,
}
impl S for A {
fn new () -> A {
A {val: 1}
}
}
struct B {
val: i32
}
impl S for B {
fn new() -> B {
B {val:2}
}
}
产生错误消息"error[E0609]: no field <code>val</code> on type <code>Box<dyn S></code>"
有没有办法访问这样的字段,或者我需要拼凑出一个解决方法?
enum
是一个很好的用例。enum
类似于 trait,但是实现者数量是有限的,并且你打算基于它们进行区分。 - Silvio Mayolo