gpt4 book ai didi

rust - Rust Union使用功能

转载 作者:行者123 更新时间:2023-12-03 11:44:34 25 4
gpt4 key购买 nike

我正在做大学作业。
任务是对具有变体字段(联合)的结构中的数据进行排序。
我们通常使用C,但我决定尝试使用Rust并遇到问题/
我不明白如何解决我的错误。
联合内部的结构之一必须包含字符串。
据我了解,问题出在这个字符串中。
我的结构:

pub struct Show
{
theatre: String,
name: String,
director: String,
price_min: i64,
price_max: i64,
type_name: ShowType,
type_data: ShowTypeData,
}
enum ShowType
{
Childish,
Adultish,
Musical,
}
union ShowTypeData
{
childish: ChildishShow,
adultish: AdultishShow,
musical: MusicalShow,
}
struct ChildishShow
{
age_target: i8,
subtype: ChildishShowType,
}
enum ChildishShowType
{
Tale,
Piece,
}
struct AdultishShow
{
subtype: AdultishShowType,
}
enum AdultishShowType
{
Piece,
Dramma,
Comedy,
}
struct MusicalShow
{
composer: String,
country: String,
age_min: i8,
duration: i16,
}
错误:
error[E0658]: unions with non-`Copy` fields are unstable
--> src/show.rs:19:1
|
19 | / union ShowTypeData
20 | | {
21 | | childish: ChildishShow,
22 | | adultish: AdultishShow,
23 | | musical: MusicalShow,
24 | | }
| |_^
|
= note: see issue #55149 <https://github.com/rust-lang/rust/issues/55149> for more information
error[E0740]: unions may not contain fields that need dropping
--> src/show.rs:23:5
|
23 | musical: MusicalShow,
| ^^^^^^^^^^^^^^^^^^^^
|
note: `std::mem::ManuallyDrop` can be used to wrap the type
--> src/show.rs:23:5
|
23 | musical: MusicalShow,
| ^^^^^^^^^^^^^^^^^^^^
我不明白“复制”和“删除”的确切含义。
可能那是我的问题。

最佳答案

不要将联合从C逐字复制到Rust。
改为写:

pub struct Show
{
theatre: String,
name: String,
director: String,
price_min: i64,
price_max: i64,
show_type: ShowType,
}
enum ShowType
{
Childish(ChildishShow),
Adultish(AdultishShow),
Musical(MusicalShow),
}
联合是Rust中的一种低级,本质上不安全的构造,并且您可以放入的内容非常有限。请尽可能使用 enum代替。没有工会,没有问题。

关于rust - Rust Union使用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64498340/

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