我想通过一个输入验证服务器在Rust应用程序上做我的第一次尝试,该服务器可以验证来自AJAX请求的值.这意味着我需要一种方法来使用JSON配置文件来指定基于输入值的名称使用哪些验证函数,以及可能在HTTP请求中在运行时进入的表单名称.如何在Rust中执行类似于PHP的call_user_function_array的操作?
She*_*ter 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里唯一棘手的部分是线let mut methods: HashMap<_, fn(&str) -> bool> = HashMap::new().您需要定义该映射将具有作为函数指针的值.每个函数都有自己独特的匿名类型,而函数指针则是一个抽象.
| 归档时间: |
|
| 查看次数: |
956 次 |
| 最近记录: |