是否可以在 Rust 中指定赋值变量的可变性?有点像
fn new(len: usize) -> Thing { ... }
fn new_mut(len: usize) -> mut Thing { ... }
我有一个特定的案例,知道类型的可变性可以用来对我的数据结构进行一些底层优化。
尝试手动强制执行可变性是可能的,但似乎很不优雅,尤其是当可变性的概念已经是 Rust 语言的固有部分时。你最终会遇到这样的奇怪情况:
// Thing::new() returns a data structure with an immutable backing type,
// but the code below looks like it should be mutable.
let mut foo = Thing::new(5);
在这种情况下,我要么必须选择尝试弄清楚是否有人试图手动对我的不可变 Thing
进行可变引用(我想是 panic ),要么通过制作 new
返回一个隐藏所有可变函数的 Thing
包装器(这意味着 mut
关键字变得毫无意义且具有误导性)。
最佳答案
我认为您有一些误解:返回类型的可变性不是也不应该是函数签名的一部分,可变性始终由调用方决定。
返回类型是函数执行后调用栈返回时返回给调用者的内存槽的描述。返回类型的所有权已完全转移,例如Thing
已完全移至调用方。调用者如何处理返回的内存单元不是被调用函数的关注点,因为它已经完成并返回了。没有可变或不可变返回类型之类的东西,可变性总是与内存槽有关。在您的示例中,这仅在声明变量 foo
时决定,该变量定义了调用方结果类型的内存槽。只要您拥有数据结构的完全所有权,您就可以自由决定甚至更改数据的可变性。
您正在寻找的可能是专门用于优化的单独类型。
关于rust - 你能在 Rust 中指定返回类型可变性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67361226/