首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在锈蚀中,枚举与结构类型的名称是如何工作的?

在锈蚀中,枚举与结构类型的名称是如何工作的?
EN

Stack Overflow用户
提问于 2014-08-10 17:40:06
回答 1查看 1.6K关注 0票数 2

我刚刚开始学习Rust,并注意到以下代码工作正常,尽管枚举中的各种选项似乎被传播到枚举之外,因此与结构位于同一个名称空间中:

代码语言:javascript
复制
enum FooBar { Foo(int), Bar(uint) }
struct Foo { foo: int }
struct Bar { bar: uint }

但是,这会导致编译器错误:

代码语言:javascript
复制
enum FooBar { Foo(int), Bar(uint) }
enum BarBaz { Bar(uint), Baz(f32) }

结构和枚举似乎都存在于它们自己的平行宇宙中。我希望能解释一下Rust中的结构名和枚举类型名是如何工作的,以及为什么会产生这种效果。

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

EN

回答 1

Stack Overflow用户

发布于 2014-08-10 22:34:26

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

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

Struct构造函数不是函数或值,例如,不能将它们赋值给像上面这样的变量,这意味着仍然可以区分名称的含义,因为它们是在不同的上下文中使用的。因此,没有必要不允许在两个名称空间中有一个名称。

您可以混淆= Foo(42)与Foo {foo: 42}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25231320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档