这是我在 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/