为什么铁 rust 中的不变性是强制性的,除非你指定mut?这是一个安全的设计 Select ,你认为它应该是自然的其他语言吗?

我可能应该澄清一下,我还是Rust的新手.那么,这是一个与语言中的另一个特性相关的设计 Select 吗?

推荐答案

事实上,这Rust-Book名学生就是针对这个话题的.

绑定在默认情况下是不可变的并不是唯一的原因,但我们可以通过Rust的主要关注点之一来考虑它:安全性.如果你忘记说mut,编译器会捕捉到它,并让你知道你已经变异了一些你可能不打算变异的东西.如果绑定在默认情况下是可变的,编译器将无法告诉您这一点.如果你想要Mutations ,那么解决方法很简单:加mut.

在可能的情况下,还有其他一些很好的理由可以避免可变状态,但它们不在本指南的范围之内.一般来说,你通常可以避免显式Mutations ,因此在 rust 病中更可取.也就是说,有时候,Mutations 是你所需要的,所以它不是多余的.

基本上,这是C++的信条,所有你不想修改的东西都应该是常量,只是通过颠倒规则来正确地完成.Also see this Stackoverflow article about C++.

Rust相关问答推荐

为什么我们不能通过指针算法将Rust原始指针指向任意地址?'

将内部类型作为参数的泛型 struct 上的方法

在泛型 struct 的字段声明中访问关联的Conant

如何在Tauri中将变量从后端传递到前端

铁 rust 中的泛型:不能将`<;T作为添加>;::Output`除以`{Float}`

在rust sqlx中使用ilike和push bind

是否可以在不切换到下一个位置的情况下获得迭代器值:

为什么RefCell没有与常规引用相同的作用域?

borrow 是由于对 `std::sync::Mutex>` 的解引用强制而发生的

Rust:为什么 &str 不使用 Into

结果流到 Vec 的结果:如何避免多个into_iter和collect?

Rust 文件未编译到 dll 中

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

(let b = MyBox(5 as *const u8); &b; ) 和 (let b = &MyBox(5 as *const u8); ) 之间有什么区别

bcrypt 有长度限制吗?

如何将 Rust 字符串转换为 i8(c_char) 数组?

如何使用 rust bindgen 生成的 std_vector

Abortable:悬而未决的期货?

如何在没有 `make_contiguous()` 的情况下对 VecDeque 进行排序或反转?

类型参数不受 impl 特征、自身类型或谓词的约束