【问题标题】:Is there a reason tuples, structs, and tuple structs need to have inconsistent syntax in Rust?元组、结构和元组结构需要在 Rust 中具有不一致的语法是否有原因?
【发布时间】: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,我或多或少地问有什么区别。拥有三个结构而不是一个结构会带来很大的认知负担,因此他们以这种方式设计语言可能有充分的理由......即编译器可能以不同的方式实现它们......

标签: syntax rust


【解决方案1】:

不,但似乎没有一个替代建议值得破坏所有现有代码。

https://internals.rust-lang.org/t/unify-structs-tuples-and-funciton-calls/1667

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多