为什么我不必为类型实现Any特性,即使它是必需的?

Aak*_*des 6 rust

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

use std::any::Any;

trait Trait: Any {}

struct Thing {}

impl Trait for Thing {}
Run Code Online (Sandbox Code Playgroud)

以下不编译(这符合我对正确的理解)

trait RequiredTrait {}
trait Trait: RequiredTrait {}

struct Thing {}

impl Trait for Thing {}
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 7

std::any包含实现:

impl<T> Any for T
where
    T: 'static + ?Sized, 
Run Code Online (Sandbox Code Playgroud)

这意味着任何类型Any只要它包含的任何引用都是实现的'static,并且类型的大小.您的Thing结构符合这两个要求,因此它实现Any并且您的代码编译.