为什么以及何时应该在块的末尾使用逗号?

时间:2015-01-27 05:26:03

标签: rust

当代码块可以以逗号结束或不以逗号结束时,Rust中有很多情况。 例如:

enum WithoutComma 
{
    x,
    y
}

enum WithComma
{
    x,
    y,
}

还有其他与"匹配"等的例子。似乎两种变体都会产生相同的结果。现在我知道唯一的情况是放置或删除逗号更改行为,它是1元素元组声明(但它不是块):

let just_int = (5);
let tuple = (5,);

问题是为什么在块的末尾可以使用逗号?为什么语言中存在这种二元论?它的原因是什么?

1 个答案:

答案 0 :(得分:12)

正如您所说,唯一需要尾随逗号的是1元组模式,类型和构造let (x,): (Type,) = (1,)。在其他地方,尾随逗号是可选的,没有效果,但是由于以下几个原因而允许:

  • 它使宏变得更容易:不需要小心不要在一系列项目的最后插入逗号。
  • 在扩展一系列内容时会使差异变得更好,例如:添加变体

    enum Foo {
        Bar
    }
    

    给出

    enum Foo {
        Bar,
        Baz
    }
    

    正在改变两行(即像git这样的工具将显示Bar行被修改,以及插入的行),即使只有第二行实际上有任何有趣的变化。如果Bar以尾随逗号开头,则在Baz,之后插入fn foo(x: u16,) -> (u8, u8,) { (bar(x,), baz(x,),) } ,只更改一行。

它们不是必需的(除了1元组之外)因为那是相当奇怪的(IMO),例如

enum

(我想对struct / {{1}}声明看起来不那么奇怪,但是,能够省略它很好。)