在定义特征时,我的理解是,在实现左侧时,:
右侧的特征名称都是必需的。如果是这样,为什么会编译以下内容:
use std::any::Any;
trait Trait: Any {}
struct Thing {}
impl Trait for Thing {}
以下内容无法编译(与我对正确内容的理解相符)
trait RequiredTrait {}
trait Trait: RequiredTrait {}
struct Thing {}
impl Trait for Thing {}
答案 0 :(得分:7)
std::any
包含the implementation:
impl<T> Any for T
where
T: 'static + ?Sized,
这意味着任何类型都可以实现Any
,只要它包含的任何引用都是'static
并确定大小即可。您的Thing
结构同时满足这两个要求,因此它确实实现了Any
并且您的代码得以编译。