gpt4 book ai didi

rust - 给定 Rust 中的状态更改使对象过期

转载 作者:行者123 更新时间:2023-11-29 08:19:04 24 4
gpt4 key购买 nike

在 Rust 中是否可以显式提供对象何时过期的上下文?例如,想象一个执行如下操作的图形操作代码:

// borrow an edge from the graph
let edge : &Edge = graph.findEdge( ... );
// modify the edge
let new_edge : &Edge = graph.splitEdge(edge, vertex);
// the old edge is invalid now, this should be an compiler error now!
edge.something

一般来说,有什么方法可以将对象的生命周期与状态或状态变化联系起来吗?

最佳答案

如果你将你的代码与你的注释相匹配,你会得到一个编译器错误,虽然不是在你想要的位置。您当前的代码基本上是 this .在这种情况下,split_edge 看起来像这样:

fn split_edge(&self, edge: &Edge) -> &Edge {}

这不允许您更改图形或边。所以这个函数不能使边缘无效。如果你借用 self 作为可变的,你会得到一个编译器错误,因为你已经借用了 self 作为不可变的:

fn split_edge(&mut self, edge: &Edge) -> &Edge {}
// error: cannot borrow `graph` as mutable because it is also borrowed as immutable [--explain E0502]

如果你借用 edge mutable 而不是,你也会遇到错误。

如果 edge 没有真正失效,您只是想避免重复使用它,只需重复使用变量名 edge 而不是 new_edge

let edge : &Edge = graph.find_edge();
let edge : &Edge = graph.split_edge(edge);

关于rust - 给定 Rust 中的状态更改使对象过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39528320/

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