【发布时间】:2020-01-29 06:59:25
【问题描述】:
我有一个petgraph::Graph 结构,我通过给每个节点权重一个parent_edge_idx 强加了一个树结构,这是从其父节点连接到自身的边的Option<EdgeIdx>。
我需要遍历节点的子节点。我需要连接边的边权和子节点的权重。
我想将该迭代分解为一个帮助函数,该函数返回对Iterator<Item = (EdgeIdx, NodeIdx)> 的引用。我想免费做这个;因为我必须借用self.search_tree才能做到这一点,所以迭代器只在self的生命周期内有效。
- 这是一个合理的函数吗?
- 可以写这个函数吗?
任何门控功能都可以;我每晚都在。
fn children<'a>(
&'a mut self,
node_idx: NodeIdx,
) -> &'a impl Iterator<Item = (EdgeIdx, NodeIdx)> {
&self.search_tree.neighbors(node_idx).map(|child_idx| {
let node = self.search_tree.node_weight(child_idx).unwrap();
let edge_idx = node.parent_edge_idx.unwrap();
(edge_idx, child_idx)
})
}
【问题讨论】:
-
试试
impl Iterator<Item = (EdgeIdx, NodeIdx)> + 'a吧? -
如果您要使用高级的、不稳定的 Rust 功能,您可能应该已经熟悉 basic Rust 语言。你shouldn't be attempting to return references to variables created in functions because it can never work.
-
请同时提供minimal reproducible example您的问题;这样做通常会在更短的时间内为您提供更优质的答案。
-
@masonk 答案相同是在 SO 上将事物标记为重复项的重要部分。当一个问题被标记为重复时,该问题将永远存在,为您提到的那些确切的 Google 搜索提供路标。这些访问者最终来到这里,可以查看他们的问题是否与您的问题(或链接的问题)接近,然后可以阅读提供的答案。
-
问题的缺失部分包括
Self的完整定义。您请求任何潜在的回答者根据您提供的代码凭空创建的代码/工作量是巨大的——他们必须猜测所有类型应该是什么,存在哪些字段,哪些 crate 和确切的导入是必需的,他们必须创建一个驱动程序和数据来重现错误等。如果你edit你的问题包含这样的内容,我通常会在我关闭它时添加一条评论,将重复的答案应用于你的具体案例.