在定义特性时,我的理解是,无论何时实现左侧,都需要:
右侧的特性名称。如果是,为什么要编译以下内容:
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
并编译了代码。