我想通过输入验证服务器在Rust应用程序上进行第一次尝试,该服务器可以验证来自AJAX请求的值。这意味着我需要一种方法来使用JSON配置文件来指定基于输入值的名称使用哪些验证函数,以及可能在HTTP请求中在运行时进入的表单名称。如何在Rust中执行与PHP的call_user_function_array类似的操作?
答案 0 :(得分:10)
您可以将函数的引用添加到HashMap
:
use std::collections::HashMap;
// Add appropriate logic
fn validate_str(_: &str) -> bool { true }
fn validate_bool(_: &str) -> bool { true }
fn main() {
let mut methods: HashMap<_, fn(&str) -> bool> = HashMap::new();
methods.insert("string", validate_str);
methods.insert("boolean", validate_bool);
let input = [("string", "alpha"), ("boolean", "beta")];
for item in &input {
let valid = match methods.get(item.0) {
Some(f) => f(item.1),
None => false,
};
println!("'{}' is a valid {}? {}", item.1, item.0, valid);
}
}
这里唯一棘手的部分是行let mut methods: HashMap<_, fn(&str) -> bool> = HashMap::new()
。您需要定义该映射将具有 function 指针的值。每个函数都有自己独特的匿名类型,函数指针是一个抽象的基础。