gpt4 book ai didi

enums - 类似结构的枚举可以用作类型吗?

转载 作者:行者123 更新时间:2023-11-29 07:52:05 25 4
gpt4 key购买 nike

考虑以下(非法)示例:

enum Foo {
Bar { i: i32 },
Baz,
}

struct MyStruct {
field: Foo::Bar,
}

Foo::Bar 是一个 struct-like variant .我发现它们非常有用。但是,我有一个实例,我需要将结构的实例存储在另一个结构中,如上面的 MyStruct 示例。将 MyStruct::field 更改为 Foo 将是无效的,因为将字段更改为 Foo::Baz 没有意义>。它只是一个 Foo::Bar 的实例。

rustc 告诉我上面的代码是无效的:

error: found value name used as a type: DefVariant(DefId { krate: 0u32, node: 4u32 }, DefId { krate: 0u32, node: 5u32 }, true)

我只是做错了什么,还是这不可能?如果不可能,是否有任何计划?

我知道我可以像这样解决它,但我认为这是一个次等的选择,如果可能的话我想避免它:

struct Bar {
i: i32,
}

enum Foo {
Bar(Bar),
Baz,
}

struct MyStruct {
field: Bar,
}

最佳答案

在第一种情况下,

enum Foo {
Bar { i: i32 },
Baz,
}

正如编译器告诉您的那样,Bar 不是类型而是值,不能用作类型(错误:找到值名称用作类型)。

你的第二个构造是通常使用的,例如在标准库中用 std::net::IpAddrstd::net::SocketAddr .

关于enums - 类似结构的枚举可以用作类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29935878/

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