尝试绑定元组变量时"expected identifier, found ("



我玩了一点Rust,结果被卡住了。我有以下功能:

fn addOne(h: (i32, i32, i32)){
    let mut (x, y, z) = h;
    (x+1, y+1, z+1)
}

这给了我以下编译错误:

example.rs:2:10: 2:11 error: expected identifier, found `(`
example.rs:2    let mut (x, y, z) = h;

装订有问题吗?很抱歉,如果这是一个如此简单的问题。

mut限定符适用于每个变量。当你正在破坏一个变量时,每个变量都可以是可变的或不可变的:

fn add_one(h: (i32, i32, i32)) -> (i32, i32, i32) {
    let (mut x, mut y, mut z) = h;
    (x+1, y+1, z+1)
}

当然,这里根本不需要可变性:

fn add_one(h: (i32, i32, i32)) -> (i32, i32, i32) {
    let (x, y, z) = h;
    (x+1, y+1, z+1)
}

您也可以在函数签名中选择析构函数:

fn add_one((x, y, z): (i32, i32, i32)) -> (i32, i32, i32) {
    (x+1, y+1, z+1)
}

或者使用默认的元组访问器方法:

fn add_one(h: (i32, i32, i32)) -> (i32, i32, i32) {
    (h.0 + 1, h.1 + 1, h.2 + 1)
}

如果您想在适当的位置对元组进行变异,则需要为元组提供可变引用。在不了解更多关于你试图解决的问题的情况下,我会积极劝阻你选择这条路,至少在你分析并确定你需要它之前:

fn add_one(h: &mut (i32, i32, i32)) {
    h.0 += 1;
    h.1 += 1;
    h.2 += 1;
}
fn main() {
    let mut a = (1, 2, 3);
    add_one(&mut a);
    println!("{:?}", a)
}

有很多方法可以编写对您有意义的代码!

最新更新