MST

星途 面试题库

面试题:Rust函数指针在简单事件驱动程序中的应用

假设你要编写一个简单的事件驱动程序,用于处理用户在控制台输入的命令。当用户输入'print'时,调用一个打印特定字符串的函数;当输入'exit'时,调用一个退出程序的函数。请使用Rust函数指针实现这个功能,并解释函数指针在这里是如何起作用的。
30.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn print_message() {
    println!("这是特定字符串");
}

fn exit_program() {
    std::process::exit(0);
}

fn main() {
    let command_handlers: std::collections::HashMap<&str, fn()> = std::collections::HashMap::from([
        ("print", print_message),
        ("exit", exit_program),
    ]);

    loop {
        println!("请输入命令 (print/exit):");
        let mut input = String::new();
        std::io::stdin().read_line(&mut input).expect("读取输入失败");
        let command = input.trim();

        if let Some(handler) = command_handlers.get(command) {
            handler();
        } else {
            println!("未知命令,请重新输入。");
        }
    }
}

函数指针的作用解释

  1. 定义函数指针类型:在Rust中,函数指针类型为 fn()。在上述代码中,command_handlers 这个 HashMap 存储了命令和对应的函数指针。这里使用函数指针将命令与对应的处理函数关联起来,使得代码结构更加清晰和可维护。
  2. 调用函数:通过从 HashMap 中获取函数指针,然后像调用普通函数一样调用它(如 handler()),就可以执行对应的处理逻辑。这种方式实现了根据用户输入的不同命令,动态调用不同的函数,这正是事件驱动编程的核心思想。函数指针在这里起到了一个桥梁的作用,连接了用户输入(事件)和对应的处理逻辑(函数)。