【发布时间】:2018-08-18 22:00:13
【问题描述】:
Rust 中元组、结构和元组结构需要有不一致的语法有什么原因吗?
我还在看手册,所以可能有一个明显的答案,但是不能统一语法,让以下所有内容都合法吗?:
struct { Int, Int }
struct Foo { Int, Int }
struct { a: Int, b: Int }
struct Foo { a: int, b: Int }
struct Foo { Int, a: Int, b: Int, Int }
如果出于某种技术原因避免混合命名参数和未命名参数,您可以将未命名参数保留在 () 中,将命名参数保留在 {}...
struct (Int, Int);
struct Foo(Int, Int);
struct { a: Int, b: Int }
struct Foo { a: Int, b: Int }
struct Foo(Int, Int) { a: Int, b: Int }
【问题讨论】:
-
Rust 有像 Go 一样的前瞻性限制吗? Go 的语法很大程度上受 one-token-look-ahead 规则的影响;这可以解释“实际限制” - 至于混合元组(序数元素)/记录(命名元素)..大多数语言没有这种混合,其中“设计 i> 限制”是不是受支持的构造。
-
struct (Int, Int)会做什么?声明一个未命名的类型真的没有意义。 -
这可能可能,但你为什么要统一结构和元组?它们是服务于不同目的的不同对象。
-
真的,您可以从语言中删除元组和元组结构而不会产生什么影响,尽管您希望匿名结构的便捷语法可以减轻痛苦,例如
struct { a: A, b: B }而不是(A, B)(例如 @ 987654328@). -
@Levans,我或多或少地问有什么区别。拥有三个结构而不是一个结构会带来很大的认知负担,因此他们以这种方式设计语言可能有充分的理由......即编译器可能以不同的方式实现它们......