variables - 将 "mut"放在变量名之前和 ":"之后有什么区别?

标签 variables syntax reference rust mutable

这是我在 Rust 文档中看到的两个函数签名:

fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }
fn modify_foo(foo: &mut i32) { *foo += 1; *foo }

为什么 mut 的位置不同?

似乎第一个函数也可以声明为

fn modify_foo(foo: mut Box<i32>) { /* ... */ }

最佳答案

如果您来自 C/C++,基本上这样想可能也会有所帮助:

// Rust          C/C++
    a: &T     == const T* const a; // can't mutate either
mut a: &T     == const T* a;       // can't mutate what is pointed to
    a: &mut T == T* const a;       // can't mutate pointer
mut a: &mut T == T* a;             // can mutate both

您会注意到它们是彼此相反的。 C/C++ 采用“黑名单”方法,如果你想要某些东西不可变,你必须明确说明,而 Rust 采用“白名单”方法,如果你想要某些东西可变,你必须明确说明。

关于variables - 将 "mut"放在变量名之前和 ":"之后有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55218165/

相关文章:

c - C 和汇编中奇怪的变量问题

python - Jython 和 Python 的区别

c++ - 中缀 vs 前缀语法 : name lookup differences

c++ - 在 C++ 中引用 C 结构

c++ - 您在 c/c++ 项目中使用指针到指针和/或指针引用最有用的时间是什么时候?

variables - AngularJS:从 Controller 内读取路由参数

python - 如何将 tensorflow 变量转换为 python 变量?

rust - 如果让表达式如何 "read"?

MongoDB 关系 : embed or reference?

javascript - 将 mysql_fetch_array 中的 php 数据保存为脚本变量