解构元组时如何避免克隆?
How to avoid clone when destructuring tuple?
我有以下代码:
let (_, expression) = arg.clone();
match expression.node {
ExprLit(_) => (),
_ => arguments.push(arg),
}
但是,我们不需要克隆 arg
。
我试图避免克隆这个变量,我想出了这个解决方案:
{
let (_, ref expression) = arg;
if let ExprLit(_) = expression.node {
return;
}
}
arguments.push(arg);
但我不喜欢它(额外的大括号和 return
的使用)。
在这种情况下还有其他解决方案吗?
您可以访问元组的元素,就像它们是编号的结构字段(从零开始)一样,即没有模式匹配,这避免了克隆或创建新范围的需要。
if let ExprLit(_) = arg.1.node { ... }
我有以下代码:
let (_, expression) = arg.clone();
match expression.node {
ExprLit(_) => (),
_ => arguments.push(arg),
}
但是,我们不需要克隆 arg
。
我试图避免克隆这个变量,我想出了这个解决方案:
{
let (_, ref expression) = arg;
if let ExprLit(_) = expression.node {
return;
}
}
arguments.push(arg);
但我不喜欢它(额外的大括号和 return
的使用)。
在这种情况下还有其他解决方案吗?
您可以访问元组的元素,就像它们是编号的结构字段(从零开始)一样,即没有模式匹配,这避免了克隆或创建新范围的需要。
if let ExprLit(_) = arg.1.node { ... }