为什么我不必为一个类型实现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 {}

std::any包含实现:

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

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

最新更新