【发布时间】:2020-02-25 04:21:03
【问题描述】:
我遇到了一种情况,我正在设置具有多个发送者的通道,这些发送者需要能够将不同类型的数据发送到接收线程。
使用以下匹配表达式创建一个接收线程来处理这些消息。
let receiver_thread = match config.style.as_str() {
"Type1" => start_recv_type1(receiver, config.clone(), log.clone()),
"Type2" => start_recv_type2(receiver, config.clone(), log.clone()),
"Type3" => start_recv_type3(receiver, log.clone()),
_ => panic!("Wrong type!"),
};
可以发送的一种可能类型是字符串,而另一种是我定义的结构。但是,编译器抱怨接收线程上的类型不匹配。查看我的接收者和发送者是如何定义的,我可以明白为什么这是不正确的,因为它具有以下类型:std::sync::mpsc::Receiver<std::string::String>。
看看我的匹配表达式,我认为创建一个更通用的函数来初始化我的接收线程是更明智的做法,但是如何通过同一通道发送不同类型的数据?我已经通过使用将结构和字符串作为字段的枚举搜索并找到了可能的解决方案,但这是否意味着我必须更改所有函数定义才能使用此枚举语法? IE。将我的函数更改为使用 ChannelTypes(StringMessage(String)) 或 ChannelTypes(StructMessage(factory::datatype::MyStruct))
enum ChannelTypes {
StructMessage(factory::datatype::MyStruct),
StringMessage(String),
}
【问题讨论】: