rust - 这不是在改变一个不可变的变量吗?
问题描述
我怎么被允许这样做?
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 中传递的变量的可变性具有重要意义。但它并没有从第一个程序开始改变它。我想我只是误解了所说的内容,但在这种情况下,关于内存/副本的任何反馈都会很棒。
解决方案
变异是关于修改已经定义的值。调用函数时,参数已命名并已定义。定义自己的变量时也是如此。
你编码
fn procedure(param: f64) {
println!("{}", param + 9);
在概念上与
fn procedure(param: f64) {
println!("{}", {let a0 = param + 9; a0});
这意味着创建了一个临时变量来存储 的值,param + 9
然后将其作为参数传递给println
. 你没有改变任何东西,你只是在创建一个新的临时变量。
推荐阅读
- logstash - 由于 UTF-8 中的无效字节序列,无法加载 Logstash
- python - 如何使 matplotlib.pyplot.figure 调整大小适用于 2 个图?
- javascript - Javascript 在匿名函数定义中解构
- mysql - 如何防止页面刷新时数据库中的自动增量?拉拉维尔 7
- c++ - 如何在 C++ 中的类的默认构造函数中调用成员对象变量的参数化构造函数?
- rest - 网络设备的 Openapi 规范设计
- c# - 在 C# 中使用 Spire.Office 将 Excel 工作表导出到 Word 维护合并的单元格
- ios - 保存数据时出现问题,将 CoreData 与 SwiftUI 一起使用
- reactjs - 如何用玩笑模拟 Firebase analitycs?
- android - 为什么 Android 将我的一些可绘制对象反转为深色主题(夜间)而不是其他对象?