在Rust中合并不同的集合[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

说我有一个功能

fn process_graph_nodes(graph: Graph, nodes: Option<impl Iterator<Item=Node>){
    for node in nodes.unwrap_or_else(|| graph.all_nodes()) {
      //processing node
    }
}

方法all_nodes返回一些实现Iterator<Item=Node>的类型。因此,nodes.unwrap()graph.all_nodes()都返回产生Node类型的迭代器,但它们是不同的类型,导致编译错误的原因。

有没有办法让代码编译,可能是通过将两种类型转换为Iterator<Item=Node>的特征对象?

rust
1个回答
0
投票

我想我会定义一个内部函数并手动调度:

fn process_graph_nodes(graph: Graph, nodes: Option<impl Iterator<Item=Node>){
    fn process_internal(graph: Graph, nodes: impl Iterator<Item=Node>) {
        for node in nodes {
          //processing node
        }
    }
    match nodes {
        None => process_internal(graph, graph.all_nodes()),
        Some(n) => process_internal(graph, n),
    }
}

(我手边没有编译器,但我认为你可以得到这个想法。)

这样,您就可以避免使用Either的潜在成本。

© www.soinside.com 2019 - 2024. All rights reserved.