Rust 我应该如何减少锈迹类型签名的重复?
我的工作代码不是很枯燥:Rust 我应该如何减少锈迹类型签名的重复?,rust,Rust,我的工作代码不是很枯燥: impl 哪里 &“a:G:GraphBase+ 资料+ 数据地图, 呃:埃杰里夫,, E:Copy+Eq+Hash, N:Copy+Eq+Hash, { fn叠加元素(&'a self)->叠加元素(&'b mut self,edge:ER,eow:eow){ self.edges.insert(edge.id(),eow); self.edge\u refs.insert(edge.id(),edge); } pub fn overlay_node关联的类型并不总是
impl
哪里
&“a:G:GraphBase+
资料+
数据地图,
呃:埃杰里夫,,
E:Copy+Eq+Hash,
N:Copy+Eq+Hash,
{
fn叠加元素(&'a self)->叠加元素(&'b mut self,edge:ER,eow:eow){
self.edges.insert(edge.id(),eow);
self.edge\u refs.insert(edge.id(),edge);
}
pub fn overlay_node关联的类型并不总是需要有自己的类型参数。例如,您可以在绑定中写入G::EdgeId
,而不需要单独的参数E
我调整了游乐场链接中的代码以减少类型参数的数量。下面是示例。例如,Overlay
现在有4个而不是8个类型参数:
pub struct Overlay<G, ER, NOW, EOW>
where
G: GraphBase + Data,
ER: EdgeRef<Weight = G::EdgeWeight, EdgeId = G::EdgeId, NodeId = G::NodeId>,
{
nodes: HashMap<G::NodeId, NOW>,
edges: HashMap<G::EdgeId, EOW>,
edge_refs: HashMap<G::EdgeId, ER>,
graph: G,
}
pub结构覆盖
哪里
G:GraphBase+数据,
呃:埃杰里夫,,
{
节点:HashMap,
边缘:HashMap,
边缘参考:HashMap,
图:G,
}
请注意,我删除了G::NodeId
和G::EdgeId
的(不必要的)Copy+Eq+Hash
trait边界。此外,G
不再位于trait边界中的引用后面,这可能会导致生存期问题,但这些问题可以在必要时修复。相关类型(例如,GraphBase
trait中的EdgeId
和NodeId
)不总是需要指定。看看是否可以从impl中删除E
、N
、EW
和NW
。我还没有测试过这一点,但你应该能够通过编写G::EdgeId
等来使用这些类型。一个用于实验的链接会很棒!我刚刚添加了一个操场链接,我不得不做一些修改,以便t我有一个对图形的引用,而不是覆盖中图形的副本,但这要好得多。我甚至还可以去掉ER参数!@timthelion实际上,如果您使用类似于覆盖
,您仍然可以在我的解决方案中存储对图形的引用,因为&graph
实现了GraphBase
tr美国在台协会。