首页 > 解决方案 > 这不是在改变一个不可变的变量吗?

问题描述

我怎么被允许这样做?

fn procedure(param: f64) {
   println!("{}", param + 9);

但是如果没有在参数上声明可变,就不允许这样做吗?

fn procedure(mut param: f64) {
param += 9.;
println!("{}", param);

是因为在第二个函数中我直接作用于变量本身吗?

我正在尝试学习 Rust 中的所有权,但我对什么被认为是“变异”感到困惑。对在打印宏中填充花括号的变量执行操作是否有不同的规则?在我的主要功能中:

procedure(param_in_main);
println!("printing {} in main", param_in_main);

这两个函数都将给出相同的结果,而不会更改传递的变量。作为指南,我正在关注的视频对不改变 main 中传递的变量的可变性具有重要意义。但它并没有从第一个程序开始改变它。我想我只是误解了所说的内容,但在这种情况下,关于内存/副本的任何反馈都会很棒。

标签: rustimmutabilitymutability

解决方案


变异是关于修改已经定义的值。调用函数时,参数已命名并已定义。定义自己的变量时也是如此。

你编码

fn procedure(param: f64) {
   println!("{}", param + 9);

在概念上与

fn procedure(param: f64) {
   
   println!("{}", {let a0 = param + 9; a0});

这意味着创建了一个临时变量来存储 的值,param + 9然后将其作为参数传递给println. 你没有改变任何东西,你只是在创建一个新的临时变量。


推荐阅读