Ars*_*min 5 syntax idioms rust
在代码块可以以逗号结束或不以逗号结束时,Rust中存在许多情况.例如:
enum WithoutComma
{
x,
y
}
Run Code Online (Sandbox Code Playgroud)
要么
enum WithComma
{
x,
y,
}
Run Code Online (Sandbox Code Playgroud)
还有其他"匹配"等的例子.似乎两种变体都会产生相同的结果.现在我知道放置或删除逗号更改行为的唯一情况,它是1元素元组声明(但它不是块):
let just_int = (5);
let tuple = (5,);
Run Code Online (Sandbox Code Playgroud)
问题是为什么在块的末尾可以使用逗号?为什么语言中存在这种二元论,其原因是什么?
huo*_*uon 12
正如您所说,唯一需要尾随逗号的是1元组模式,类型和构造let (x,): (Type,) = (1,).在其他地方,尾随逗号是可选的,没有任何效果,但是由于以下几个原因而允许:
在扩展事物列表时,它会使差异更好,例如添加变量
enum Foo {
Bar
}
Run Code Online (Sandbox Code Playgroud)
给
enum Foo {
Bar,
Baz
}
Run Code Online (Sandbox Code Playgroud)
这是改变两条线(即工具git将显示Bar修改后的线,以及插入的线),即使只有第二条实际上在更改中有任何有趣的东西.如果Bar以尾随逗号开头,那么Baz,在它之后插入就可以了,只更改了一行.
它们不是必需的(除了1元组),因为这是相当奇怪的(IMO),例如
fn foo(x: u16,) -> (u8, u8,) {
(bar(x,), baz(x,),)
}
Run Code Online (Sandbox Code Playgroud)
(我想对enum/ struct声明看起来不那么奇怪,但是,能够省略它真的很好.)