我正在调查使用生锈特征的对象安全性,并根据以下代码,我有几个问题。
trait Foo {}
trait Bar : Foo {}
struct Baz;
impl Foo for Baz {}
impl Bar for Baz {}
fn do_foo(_: &Foo) {
println!("Doing foo stuff.");
}
fn do_bar(_: &Bar) {
println!("Doing bar tuff.");
}
fn main() {
let x = Baz;
let y: &Foo = &x;
do_foo(y);
let y: &Bar = &x;
do_bar(y);
// do_foo(y); -- Does not compile with mismatched types error, Expected: &Foo, found &Bar
}
Bar
继承自Foo
,为什么无法将&Bar
强制转换为&Foo
?do_foo
声明为通用?可能是do_foo
本身可能需要存在于对象安全特征上。