rust中,trait相当于其他语言中的接口。例如json序列化,需要实现Serialize
这个trait,但是,这里存在如下三个限制:
- 要实现的 trait 和类型都在当前 crate 中定义。
- 要实现的 trait 在当前 crate 中定义,而类型在外部 crate 中定义。
- 要实现的类型在当前 crate 中定义,而 trait 在外部 crate 中定义。
也就是说,你想要对一个结构体去实现某个trait,要么,这个结构体是你的(也就是在你当前crate包中),要么,这个trait是你定义的,两者至少有一个是你自己的,你才能对这个结构体实现这个指定的trait。
如果,trait和结构体都不是你实现的,你将无法为这个外部结构体实现外部trait。例如,我想为TcpStream实现Serialize,直接写,会报错
`mio::net::TcpStream` is not defined in the current craterustcE0117
main.rs(24, 1): original diagnostic
只能通过包裹TcpStream来实现了,总之,为外部结构体实现外部trait就是行不通。