首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候只有在运行时才知道类型?

什么时候只有在运行时才知道类型?
EN

Stack Overflow用户
提问于 2020-11-09 21:27:39
回答 1查看 243关注 0票数 0

What is the difference between &Trait and impl Trait when used as method arguments?的答复指出:

如果您的对象的实际类型只有在运行时才知道,这是您唯一可以使用的版本,因为您需要使用动态调度。

在编译时,您什么时候不知道类型?当Rust编译器检查一个类型是否符合&T1的特性时,难道它也不知道它的具体类型吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-09 21:52:55

下面是一个例子:

代码语言:javascript
复制
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的点进行检查,因为它必须引用具体的类型。代码的其余部分可以在不知道具体类型的情况下通过使用动态分派来使用引用。所以编译器总是知道它指的是具体类型,但不一定是哪种类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64759504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档