我正在玩Rust一点点,然后卡住了.我有以下功能:
fn addOne(h: (i32, i32, i32)){
let mut (x, y, z) = h;
(x+1, y+1, z+1)
}
Run Code Online (Sandbox Code Playgroud)
这给我在编译时出现以下错误:
example.rs:2:10: 2:11 error: expected identifier, found `(`
example.rs:2 let mut (x, y, z) = h;
Run Code Online (Sandbox Code Playgroud)
绑定有问题吗?对不起,如果这是一个简单的问题.
在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)
}
Run Code Online (Sandbox Code Playgroud)
当然,你根本不需要可变性:
fn add_one(h: (i32, i32, i32)) -> (i32, i32, i32) {
let (x, y, z) = h;
(x+1, y+1, z+1)
}
Run Code Online (Sandbox Code Playgroud)
您还可以选择在函数签名中进行解构:
fn add_one((x, y, z): (i32, i32, i32)) -> (i32, i32, i32) {
(x+1, y+1, z+1)
}
Run Code Online (Sandbox Code Playgroud)
或者使用默认的元组访问器方法:
fn add_one(h: (i32, i32, i32)) -> (i32, i32, i32) {
(h.0 + 1, h.1 + 1, h.2 + 1)
}
Run Code Online (Sandbox Code Playgroud)
如果你想改变元组的位置,你将需要提供一个对元组的可变引用.如果不了解您正在尝试解决的问题,我会主动阻止您选择此路径,至少在您进行了分析并确定需要它之前:
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)
}
Run Code Online (Sandbox Code Playgroud)
有很多方法可以编写对您有意义的代码!
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |