我在Rust中有一些返回两个元素的方法,在这些场景中返回两个元素对我来说真的很有意义。虽然,当实际调用这些方法时,我注意到Rust不允许使用元组作为左值,所以我无法重新分配它们。假设test()
是一个返回两个值的方法,我最终写了很多代码如下:
let (mut val1, mut val2) = test();
for i in 0..100 {
// partially removed for brevity;
let (_val1, _val2) = test();
val1 = _val1;
val2 = _val2;
}
let (_val1, _val2) = test();
val1 = _val1;
val2 = _val2;
通常,从我的方法返回的两个值是一些结构,反过来它们也有一些方法,所以我想调用那些返回结构中的方法。无论如何,我经常使用上面的模式,它变得很快很麻烦。有没有更好的方法来做我想要的Rust?
您可以创建一个宏
macro_rules! assign{
{($v1:ident, $v2:ident) = $e:expr} =>
{
let (v1, v2) = $e;
$v1 = v1;
$v2 = v2;
};
{($v1:ident, $v2:ident, $v3:ident) = $e:expr} =>
{
let (v1, v2, v3) = $e;
$v1 = v1;
$v2 = v2;
$v3 = v3;
}; // and so on
}
并像这样使用它
assign!{(val1, val2) = test()};