gpt4 book ai didi

types - 枚举与结构类型名称在 Rust 中如何工作?

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

我刚开始学习 Rust 并注意到以下代码有效,即使枚举内部的各种选项似乎传播到枚举外部,因此与结构位于相同的命名空间中:

enum FooBar { Foo(int), Bar(uint) }
struct Foo { foo: int }
struct Bar { bar: uint }

然而,这会导致编译器错误:

enum FooBar { Foo(int), Bar(uint) }
enum BarBaz { Bar(uint), Baz(f32) }

结构和枚举似乎生活在它们自己的平行宇宙中。如果能解释一下 struct 和 enum 类型名称在 Rust 中是如何工作的,以及为什么会出现这种效果,我将不胜感激。

此外,已经存在的类型(即结构)是否可以成为枚举中的选项之一?

最佳答案

这里有两个命名空间,值的命名空间和结构构造函数的命名空间。

枚举变体构造函数是函数,因此存在于值命名空间中,例如你可以这样写 let f: fn(uint) -> FooBar = Foo;富(1)。在同一范围内声明两个相同的函数是不合法的(如何区分它们?)。

结构构造函数不是函数或值,例如您不能像上面那样将它们分配给变量,这意味着人们仍然可以区分哪个名称是指哪个名称,因为它们在不同的上下文中使用。因此,没有必要禁止在两个命名空间中使用一个名称。

You can mess up = Foo(42) with Foo {foo: 42}

我不这么认为...至少它们是不同的类型,所以在大多数情况下,编译器会提示类型不匹配。

关于types - 枚举与结构类型名称在 Rust 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25231320/

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