【发布时间】:2022-10-23 04:21:45
【问题描述】:
使用 Rust,通常是否有可能拥有一个包含不可变值的可变容器?
例子:
struct TestStruct { value: i32 }
fn test_fn()
{
let immutable_instance = TestStruct{value: 123};
let immutable_box = Box::new(immutable_instance);
let mut mutable_vector = vec!(immutable_box);
mutable_vector[0].value = 456;
}
在这里,我的TestStruct 实例被包装在两个容器中:一个Box,然后是一个Vec。从新 Rust 用户的角度来看,将 Box 移动到 Vec 使 Box 和 TestStruct 实例都可变是令人惊讶的。
是否有类似的构造,其中装箱的值是不可变的,但盒子的容器是可变的?更一般地说,是否有可能拥有多个“层”容器而整个树不可变或不可变?
【问题讨论】:
-
您可以将
Box::new()更改为Rc::new()并更接近您想要的。Rc是一个共享容器,它可以防止其内容发生变化。 (但即便如此,如果只有一个所有者,也有办法做到这一点......) -
Rust 中的可变性不是值的函数,而是绑定的函数。您可以获取一个“不可变”值并使其再次可变,只需将其分配给
mut变量:playground。
标签: rust containers immutability