导出PartialEq时排除字段

时间:2016-12-07 04:34:06

标签: rust

是否有一种简单的方法来注释结构中的字段,以便在导出PartialEq特征时忽略它们?例如:

#[derive(PartialEq,Eq)]
pub struct UndirectedGraph {
    nodes: HashMap<NodeIdx, UndirectedNode>,
    // mapping of degree to nodes of that degree
    degree_index: Vec<HashSet<NodeIdx>>,
}

我希望两个无向图在具有相同nodes字段时被视为相等,但degree_index字段可能不同(向量可能在末尾包含额外的空哈希集)。 / p>

显然我可以手动实现特征,但自动推导会更简单。

3 个答案:

答案 0 :(得分:6)

不,目前无法做到这一点,我怀疑它会得到支持。

您可以考虑将要比较的字段转换为派生的子结构,这将使较大结构的实现变得微不足道。

答案 1 :(得分:1)

检出派生创建(docs)。它为备用derive宏提供了比标准库版本更高的功能,包括忽略HashPartialEq特征的字段的方法。

答案 2 :(得分:0)

如果您需要更复杂的#[derive]形式,我也建议使用derivative条板箱。

如果只需要一次或两次这样的事情,那么手动实现所需的特征而不是派生它们可能会更容易。 PartialEqEqvery easy来实现自己的目标:

impl PartialEq for UndirectedGraph {
    fn eq(&self, other: &Self) -> bool {
        self.nodes == other.nodes
    }
}
impl Eq for UndirectedGraph {}