作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下(非法)示例:
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::IpAddr
和 std::net::SocketAddr
.
关于enums - 类似结构的枚举可以用作类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29935878/
我是一名优秀的程序员,十分优秀!