Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Enums 处理值枚举时类型不匹配_Enums_Rust_Rpc_Matching - Fatal编程技术网

Enums 处理值枚举时类型不匹配

Enums 处理值枚举时类型不匹配,enums,rust,rpc,matching,Enums,Rust,Rpc,Matching,我试图使用rmp_rpcRust库来创建一个服务器,该服务器接受用Python编写的客户端的命令。我正在修改示例以达到我的目标 如何将不同类型(整型/字符串/布尔型)的参数处理到匹配语句中,而不出现“不匹配类型;应为i32,找到枚举'rmp_rpc::Value'”错误?对于每个方法,参数类型可能不同 fn handle_request(&mut self, method: &str, params: &[Value]) -> Self::RequestFuture

我试图使用
rmp_rpc
Rust库来创建一个服务器,该服务器接受用Python编写的客户端的命令。我正在修改示例以达到我的目标

如何将不同类型(整型/字符串/布尔型)的参数处理到匹配语句中,而不出现“不匹配类型;应为i32,找到枚举'rmp_rpc::Value'”错误?对于每个方法,参数类型可能不同

fn handle_request(&mut self, method: &str, params: &[Value]) -> Self::RequestFuture {
        match method {
            "sum" => Methods::sum(params[0], params[1]),
            "draw" => Methods::draw(params),
            "conc" => Methods::concatenate(params[0], params[1])
        }

您需要在调用站点执行类型检查,或者将类型检查推迟到被调用方(Echo:方法)

在呼叫站点:

match method {
    "sum" => Echo::sum(params[0].as_u64().expect("expected u64"), params[1].as_u64().expect("expected u64")),
    "draw" => Echo::draw(params), // <-- this must continue to be passed as &[Value]
    "concatenate => Echo::conc(params[0].as_str().expect("expected str"), params[1].as_str().expect("expected str"))
}

这是。

我根据西蒙所做的是
匹配方法{
“sum”=>Methods::sum(参数[0]。as_64().expect(“预期的u64”),参数[1]。as_64().expect(“预期的u64”),
“conc”=>Methods::concatenate(参数[0]。as_str().expect(“预期的str”),params[1]。as_str().expect(“预期的str”),
“draw”=>Methods::draw(参数),
_=>错误(“无效参数“.into())
}


但也要将每个函数的输出固定到结果中。请查看如何创建结果,然后查看您的问题以将其包括在内。我们无法说出代码中存在哪些板条箱、类型、特征、字段等。理想情况下,制作一些能够再现你在计算机上的错误的东西。还有,谢谢!这起作用了。之后,我只需编辑函数定义,使其输出相同。否则,我有一个“不兼容类型的匹配臂”错误
impl Echo {
    pub fn sum(v1: Value, v2: Value) -> u64 {
        let v1 = v1.as_u64().expect("expected u64");
        let v2 = v2.as_u64().expect("expected u64");

        v1 + v2
    }
}