为什么即使必须使用类型也不必实现Any特性?

时间:2018-11-14 22:56:17

标签: rust

在定义特征时,我的理解是,在实现左侧时,:右侧的特征名称都是必需的。如果是这样,为什么会编译以下内容:

use std::any::Any;

trait Trait: Any {}

struct Thing {}

impl Trait for Thing {}

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

trait RequiredTrait {}
trait Trait: RequiredTrait {}

struct Thing {}

impl Trait for Thing {}

1 个答案:

答案 0 :(得分:7)

std::any包含the implementation

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

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