gpt4 book ai didi

rust - 你能在 Rust 中指定返回类型可变性吗?

转载 作者:行者123 更新时间:2023-12-05 09:05:19 25 4
gpt4 key购买 nike

是否可以在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com