在代码块可以以逗号结束或不以逗号结束时,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)
问题是为什么在块的末尾可以使用逗号?为什么语言中存在这种二元论,其原因是什么?
我正在学习 Rust 宏,并且在使用vec. 实现的源代码vec!:
macro_rules! vec {
($elem:expr; $n:expr) => (
$crate::vec::from_elem($elem, $n)
);
($($x:expr),*) => (
<[_]>::into_vec(box [$($x),*])
);
($($x:expr,)*) => (vec![$($x),*])
}
Run Code Online (Sandbox Code Playgroud)
让我们忘记使用它的标准方法:
let v0 = vec![1, 2, 3];
Run Code Online (Sandbox Code Playgroud)
如果我们查看源代码,我们不应该像下面那样使用它吗?
let v1 = vec!(3; 1);
let v2 = vec!(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
为什么我们使用[]而不是()inv1并v2与 进行比较v0?