首页 > 解决方案 > 如何为包含具有可变引用的函数签名的类型实现 PartialEq?

问题描述

在我的小型玩具语言解释器中,我有一个表示值的枚举:

#[derive(PartialEq)]
pub enum LangValue {
    Number(f64),
    String(String),
    // etc. etc.
    NativeFunction(FunctionMapping),
}

NativeFunction类型与从语言中调用 Rust 函数相关:

pub type NativeFuncSignature = fn(Vec<LangValue>) -> LangValue;

#[derive(PartialEq)]
pub struct NativeMapping {
    pub name: String,
    pub arg_count: usize,
    pub func: NativeFuncSignature,
}

我发现自己需要将NativeFuncSignature可变引用传递给控制语言中变量的结构,如下所示:

pub type NativeFuncSignature = fn(Vec<LangValue>, &mut Variables) -> LangValue;

PartialEq这使for的派生失败NativeMapping,但它是必需的,因为LangValue派生自PartialEqfor 检查语言中的两个值是否相同(数字、字符串等)。值得注意的是,我并不在意NativeFunctions 之间的比较是否准确,但它必须满足PartialEq才能LangValue做到。

如何&mut在函数签名中传递引用,同时使其符合PartialEq

标签: typesrust

解决方案


推荐阅读