我正在学习 Rust,所以有些事情看起来很明显和容易,但有些事情我无法理解。
我需要有 income
和 expenses
变量来更改它们的值,通常我会使用 static
变量并在 中赋值code>unsafe
block 。
代码如下:
fn expense_sum(expense_list: &Vec<u64>, expenses: &mut u64) {
expenses = &mut (expense_list.iter().sum());
}
fn prompt_expense(expense_list: &mut Vec<u64>, expense_name: &mut Vec<String>, expenses: &mut u64) {
let expense_input: u64 = 1;
expense_list.push(expense_input);
let expense_name1: String = "test1".to_string();
expense_name.push(expense_name1);
expense_sum(&expense_list, expenses);
println!("Total user expenses: {}", expenses);
}
fn main() {
let mut expense_list: Vec<u64> = Vec::new();
let mut expense_name: Vec<String> = Vec::new();
let mut expenses: u64;
loop {
prompt_expense(&mut expense_list, &mut expense_name, &mut expenses);
// USe income and expenses here for analysis
}
}
我测试了很多方法,但我无法成功地将变量传递给 expense_sum
和 income_sum
最佳答案
这大部分是正确的;他们唯一阻止它构建的真正问题是:
fn expense_sum(expense_list: &Vec<u64>, expenses: &mut u64) {
expenses = &mut (expense_list.iter().sum());
}
此语法尝试分配引用,而不是修改引用的实际值。您需要取消引用,然后简单地分配:
*expenses = expense_list.iter().sum();
话虽这么说,但这是不好的做法。使用...函数的返回值来简单地返回值要好得多:
fn expense_sum(expense_list: &Vec<u64>) -> u64 {
expense_list.iter().sum()
}
这样代码会更短且更易读,并且您可以避免所有不必要的引用处理。您需要以类似的方式修改您的 prompt_expense
函数。
关于rust - 我需要帮助在不同的函数中使用可变引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57072743/