首页 > 解决方案 > 为什么我不必为类型实现 Any 特征,即使它是必需的?

问题描述

:在定义一个特征时,我的理解是,在左侧实现任何时候都需要右侧的特征名称。如果是这样,为什么以下编译:

use std::any::Any;

trait Trait: Any {}

struct Thing {}

impl Trait for Thing {}

以下内容无法编译(这符合我对正确内容的理解)

trait RequiredTrait {}
trait Trait: RequiredTrait {}

struct Thing {}

impl Trait for Thing {}

标签: rust

解决方案


std::any包含实现

impl<T> Any for T
where
    T: 'static + ?Sized, 

这意味着Any只要它包含的任何引用是'static并且类型被调整大小,任何类型都可以实现。您的Thing结构满足这两个要求,因此它确实实现Any并且您的代码可以编译。


推荐阅读