gpt4 book ai didi

types - 使用相同的 Rust channel (mpsc) 发送不同的类型

转载 作者:行者123 更新时间:2023-11-29 08:17:27 24 4
gpt4 key购买 nike

我有这样一种情况,我正在设置具有多个发送器的 channel ,这些发送器需要能够将不同类型的数据发送到接收线程。

使用以下匹配表达式创建一个接收线程来处理这些消息。

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> .

看看我的匹配表达式,我认为创建一个更通用的函数来初始化我的接收线程更明智,但是我如何通过同一 channel 发送不同类型的数据?我搜索并找到了一个可能的解决方案,方法是使用一个将我的结构和一个字符串作为字段的枚举,但这是否意味着我必须更改所有函数定义才能使用此枚举语法? IE。更改我的功能以使用 ChannelTypes(StringMessage(String))ChannelTypes(StructMessage(factory::datatype::MyStruct))

enum ChannelTypes {
StructMessage(factory::datatype::MyStruct),
StringMessage(String),
}

最佳答案

一个特定的 channel 只能发送一种类型的数据。正如您所注意到的,您的发件人的类型为 Sender<String>接收者的类型是 Receiver<String> .所以两者都固定在 String .没有办法解决这个问题(有充分的理由!)

首选的解决方案实际上是使用枚举,是的。事实上,您尝试模拟枚举会为您做什么:您有一个标签,它描述了预期的数据类型。在您的尝试中,您使用字符串作为标签。但出于多种原因,这是一个坏主意。当您使用枚举时,会使用整数标签(更好),Rust 会为您处理它们。更强大的解决方案。

一个建议:您可能会发现将枚举类型视为消息更有用。就是这样:您将消息发送到另一个线程。此消息可能是许多不同类型中的一种。接收线程必须检查到达的是哪种消息,然后才能处理它。

关于types - 使用相同的 Rust channel (mpsc) 发送不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com