rust - 如何处理 HashMap 的值(可能)有多种类型传递给函数?

标签 rust

<分区>

我需要传递一个 HashMap到一个函数,但是这个 HashMap理论上可以将整数和字符串都作为值。我如何为此形成相关函数的类型签名?我是 Rust 的新手,在尝试之后 fn do_thing(params: &HashMap<String, _>)遇到失败,我没有想法。

fn do_thing(params: &HashMap<String, _>) {
    // Irrelevant - regardless, the compiler fails because I cannot use the type placeholder in a function's type sig.
}

fn main() {
    let params = HashMap::new();
    params.insert(field, value); // field will always be a string, value could be a string or an integer
    do_thing(&params)
}

不是建议问题的副本 - 构造 HashMap不需要类型声明,而这涉及 HashMap作为函数的参数,它确实如此。

最佳答案

如果您的值可以是 int 或 string,请使用 enum,如下所示:

use std::collections::HashMap;

enum Value {
    Int(i32),
    String(String),
}

fn do_thing(params: &HashMap<String, Value>) {
    // each value of params can be Int or String. Check it with a match.
}

检查 ValueInt 还是 String:

match val {
    Value::Int(i)    => //do something with i
    Value::String(s) => //do something with s
}

关于rust - 如何处理 HashMap 的值(可能)有多种类型传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930257/

相关文章:

mongodb - 在 rust mongo 中生成 ObjectId

rust - 使用闭包从 Option<&T> 获取原始指针是否安全?

rust - 在特征对象上使用回调

rust - 不能在不可变切片可以使用的地方使用可变切片

rust - 一个 Rust 函数,用于返回压缩文件行上的迭代器

arrays - 尽可能使用 `Iterator` 而不是 `Vec`?

rust - Rust 函数的返回类型中的闭包

rust - 为什么是'futures::prelude::*;未声明

rust - 如何调用为 &str 实现的关联函数?

rust - 在特征边界中引用关联类型