Я хочу сделать первую попытку в приложении Rust, выполнив сервер проверки ввода, который может проверять значения из запроса AJAX. Это означает, что мне нужен способ использования файла конфигурации JSON, чтобы указать, какие функции проверки используются на основе имени входных значений и, возможно, имени формы, которые входят во время выполнения в HTTP-запросе. Как я могу сделать что-то похожее на PHP call_user_function_array в Rust?Вызов функции, известной только во время выполнения
4
A
ответ
8
Вы можете добавить ссылки на функции к 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()
. Вам нужно определить, что эта карта будет иметь значения функции указатели. Каждая функция имеет свой собственный уникальный, анонимный тип, а указатели функций - это абстракция поверх этого.
Смежные вопросы
- 1. Вызов родовой функции, когда тип известен только во время выполнения
- 2. as3commons генерирует вызов функции во время выполнения
- 3. C++ пропуск функции вызов во время выполнения
- 4. перенаправление функции c во время выполнения и вызов исходной функции
- 5. Вызов функции во время выполнения с использованием сценариев оболочки
- 6. Изменение кода выполнения функции во время выполнения
- 7. Как распечатать каждый вызов функции во время выполнения в WinDbg?
- 8. Добавить и Вызов JavaScript функции во время выполнения внутри innerHtml
- 9. Вызов общей функции с параметром типа, определенным во время выполнения
- 10. Вызов ViewModel от другого во время выполнения
- 11. Заменить вызов System.currentTimeMillis() во время выполнения
- 12. Вызов подпрограмм LockBox3 во время выполнения
- 13. Вызов метеорного метода во время выполнения другого
- 14. Переслать вызов делегату во время выполнения
- 15. Вызов метода из класса во время выполнения
- 16. Использование C во время выполнения функции библиотеки только
- 17. Swizzling функции - и функция, известная только во время выполнения
- 18. Условно замена функции C во время выполнения
- 19. IronPython получает имя функции во время выполнения
- 20. Удаление функции во время выполнения в PHP
- 21. Ошибка выполнения во время выполнения # 0 только выполнение функции внутри вызываемой функции
- 22. UninstallRun Проверка выполнения функции во время удаления
- 23. изменить содержимое функции C во время выполнения
- 24. Прерывание во время исполнения во время выполнения
- 25. java/NoClassDefFoundError error только во время выполнения
- 26. Включите только микрофон во время выполнения
- 27. bash show output только во время выполнения
- 28. Вызов функции после выполнения только нескольких запросов
- 29. Обозначение анонимной функции Javascript во время выполнения?
- 30. Как создать оболочку функции во время выполнения?
Хорошо, поэтому ссылка на функцию будет храниться аналогично тому, как вы можете это сделать в Javascript. Одна часть синтаксиса, который я не имею полного понимания, - это то, что находится между угловыми скобками. Я получаю, что во время компиляции во время компиляции определенно, что значения, присвоенные хешу, действительно являются указателями на функции, но я не могу найти ничего похожего на этот синтаксис в примерах Rust, в частности на '<_,' часть. Что такое знак подчеркивания в этом синтаксисе? –
'_' говорит компилятору вывести тип (в данном случае' & str') вместо того, чтобы записать его вручную. См. Дополнительные примеры: http://is.gd/qiJUtJ – justinas
Благодарим вас за помощь. Заставляет меня волноваться о строительстве вещей в Русте. У меня есть немало идей. Будучи в первую очередь рубином, PHP и Javascript-кодером, для меня это несколько новый мир. –