定义特征时,我的理解是 :
右侧的特征名称在实现左侧时都是必需的。如果是这样,为什么会编译以下内容:
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
包含 the implementation :
impl<T> Any for T
where
T: 'static + ?Sized,
这意味着任何类型都可以实现 Any
,只要它包含的任何引用都是 'static
并且该类型是大小合适的。您的 Thing
结构满足这两个要求,因此它确实实现了 Any
并且您的代码可以编译。
关于rust - 为什么我不必为类型实现 Any 特性,即使它是必需的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53309958/