Module 如何将trait的实现拆分为多个文件?

Module 如何将trait的实现拆分为多个文件?,module,rust,traits,Module,Rust,Traits,我开始使用,我想将trait实现拆分为多个文件 所以我把它写在一个文件中,在_open.rs上: 客户端的impl处理程序{ fn打开和切换自身,\:握手->结果{ println!套接字已打开; 好啊 } } 在另一个文件中,在_message.rs上: 客户端的impl处理程序{ fn on_message&mut self,msg:message->Result{ println!服务器收到消息“{}”,msg; 好啊 } } 在编译时,我遇到了以下错误: error[E0119]: co

我开始使用,我想将trait实现拆分为多个文件

所以我把它写在一个文件中,在_open.rs上:

客户端的impl处理程序{ fn打开和切换自身,\:握手->结果{ println!套接字已打开; 好啊 } } 在另一个文件中,在_message.rs上:

客户端的impl处理程序{ fn on_message&mut self,msg:message->Result{ println!服务器收到消息“{}”,msg; 好啊 } } 在编译时,我遇到了以下错误:

error[E0119]: conflicting implementations of trait `ws::handler::Handler` for type `models::client::Client`:
 --> src\sockets\on_message.rs:9:1
  |
9 | impl Handler for Client {
  | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `models::client::Client`
  |
 ::: src\sockets\on_open.rs:8:1
  |
8 | impl Handler for Client {
  | ----------------------- first implementation here

我想把文件分开,这样每个开发人员就可以在一个单独的工作。有没有办法做到这一点,或者我是被迫在一个文件中使用完整的trait实现?

尽管同一个对象可以有多个impl块,但不能有两个完全相同的impl块,因此冲突实现的错误如下所示:

由于一个特性不能多次实现,这是一个错误

如果特征可以被专门化,因为它需要任意数量的泛型类型参数,那么情况将非常不同,因为每个专门化都是不同的impl块。然而,即使这样,您也无法多次实施相同的专业化

如果您想将功能拆分为单独的文件,您可以这样做,但方式与最初的想法略有不同。您可以拆分客户机的impl块,而不是处理程序实现,如下面的最小可编译示例所示。试一试吧

如您所见,处理程序特性是在一个地方为客户机实现的,但客户机的所有实现都被拆分为多个文件/模块,处理程序实现只是引用了这些文件/模块:

模处理程序 { 发布类型Result=::std::Result::Result; pub-struct-HandlerError; pub特征处理程序 { fn on_open&mut self,h:usize->Result; fn on_message&mut self,m:bool->Result; } } mod客户端 { 使用super::handler::{self,handler}; 结构客户端 { h:使用, m:bool, } 客户端的impl处理程序 { fn on_open&mut self,h:usize->handler::Result { self.handle\u on\u openh } fn on_message&mut self,m:bool->handler::Result { self.handle_on_messagem } } mod open { 使用super::super::handler; 使用超级::客户端; impl客户端 { pub fn handle_on_open&mut self,h:usize->handler::Result { self.h=h; 好啊 } } } mod消息 { 使用super::super::handler; 使用超级::客户端; impl客户端 { 消息和mut self上的pub fn handle,m:bool->handler::Result { self.m=m; 好啊 } } } }
感谢@Peter的回答,我重新编写了代码,如下所示,运行良好: 插座

使用ws::Handler; 使用板条箱::模型::客户端::客户端; 使用ws::{Message,Request,Response,Result,CloseCode,Handshake}; 客户端的impl处理程序{ fn on_open&mut self,hs:握手->结果{ self.handle\u on\u openhs } fn on_message&mut self,msg:message->Result{ self.handle\u on\u messagemsg } fn on_close&mut self,代码:close代码,原因:&str{ self.handle\u on\u closecode,reason } fn on_request&mut self,request:&request->Result{ self.handle_on_requestreq } } 插座/开/关

使用板条箱::模型::客户端::客户端; 使用板条箱::客户端; 使用板条箱::模型:{truck::truck}; 使用ws::{Result,Handshake}; impl客户端{ pub fn handle_on_open&mut self,uu:握手->结果{ println!套接字已打开; 好啊 } }