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/55444087/

相关文章:

amazon-web-services - AWS 雅典娜 : user-defined variables

php - 使用变量作为发布到 php/mysql 的值

c - 我将如何从命令行扫描短语?

c# - 无法将 ref double[] 转换为 ref 对象

c++ - & 作为函数参数在编译错误中的含义

php - 将 PHP 变量传递给 Javascript 的最佳方式是什么?

Python-将全局变量分配给函数返回需要函数是全局的吗?

regex - Sublime Text 语法定义中的多行高亮显示

python - 将 lambda 分配给表达式以进行递归? (PEP8)

c - 获取c信息的好方法是什么?