Types 什么时候只有在运行时才知道类型?
对各国的答复: 如果对象的实际类型仅在运行时才为人所知,那么这是您可以使用的唯一版本,因为您需要使用动态分派 在编译时您什么时候不知道类型?当Rust编译器检查一个类型是否符合Types 什么时候只有在运行时才知道类型?,types,rust,traits,Types,Rust,Traits,对各国的答复: 如果对象的实际类型仅在运行时才为人所知,那么这是您可以使用的唯一版本,因为您需要使用动态分派 在编译时您什么时候不知道类型?当Rust编译器检查一个类型是否符合&T1的特征时,它不知道它的具体类型吗?下面是一个示例: use rand::{thread_rng, Rng}; struct ConcreteA { } struct ConcreteB { } trait Trait { } impl Trait for ConcreteA { } impl Trait for
&T1
的特征时,它不知道它的具体类型吗?下面是一个示例:
use rand::{thread_rng, Rng};
struct ConcreteA { }
struct ConcreteB { }
trait Trait { }
impl Trait for ConcreteA { }
impl Trait for ConcreteB { }
fn main() {
// a runtime value
let cond: bool = thread_rng().gen();
let a = ConcreteA { };
let b = ConcreteB { };
let r: &dyn Trait = if cond { &a } else { &b };
}
r
所指的具体类型是什么
编译器在创建&dyn Trait
的位置检查Trait约束,因为它必须引用具体类型。通过使用动态分派,代码的其余部分可以在不知道具体类型的情况下使用引用。因此编译器总是知道它引用的是具体类型,但不一定是哪一种类型。下面是一个示例:
use rand::{thread_rng, Rng};
struct ConcreteA { }
struct ConcreteB { }
trait Trait { }
impl Trait for ConcreteA { }
impl Trait for ConcreteB { }
fn main() {
// a runtime value
let cond: bool = thread_rng().gen();
let a = ConcreteA { };
let b = ConcreteB { };
let r: &dyn Trait = if cond { &a } else { &b };
}
r
所指的具体类型是什么
编译器在创建
&dyn Trait
的位置检查Trait约束,因为它必须引用具体类型。通过使用动态分派,代码的其余部分可以在不知道具体类型的情况下使用引用。所以编译器总是知道它引用的是一个具体类型,但不一定是哪一个。什么是r
引用的具体类型-r
的具体类型是&dyn Trait
@Shepmaster是的,但我在反问它引用的是什么具体类型。如果有更好的表达方式,欢迎您编辑。谢谢,现在它有意义了。r
所指的具体类型是什么?r
的具体类型是&dyn Trait
@Shepmaster是的,但我在反问它所指的具体类型是什么。如果有更好的表达方式,欢迎你来编辑。谢谢,现在有意义了。