MST

星途 面试题库

面试题:Rust命名参数在控制台复杂输出场景中的运用

假设你正在开发一个日志记录工具,要求使用Rust的命名参数来灵活控制日志在控制台的输出格式。日志可能包含时间戳、日志级别(如DEBUG、INFO、WARN、ERROR)、日志消息。请实现一个函数,通过命名参数可以选择是否显示时间戳、选择日志级别过滤(只显示特定级别的日志),并在控制台按指定格式输出日志内容。
16.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
#[derive(Debug, Clone, Copy)]
enum LogLevel {
    DEBUG,
    INFO,
    WARN,
    ERROR,
}

fn log_message(
    message: &str,
    level: LogLevel,
    show_timestamp: bool,
    min_level: LogLevel,
) {
    if level < min_level {
        return;
    }

    let timestamp = if show_timestamp {
        let now = std::time::SystemTime::now()
           .duration_since(std::time::SystemTime::UNIX_EPOCH)
           .expect("Time went backwards");
        format!("[{}] ", now.as_secs())
    } else {
        String::new()
    };

    let level_str = match level {
        LogLevel::DEBUG => "DEBUG",
        LogLevel::INFO => "INFO",
        LogLevel::WARN => "WARN",
        LogLevel::ERROR => "ERROR",
    };

    println!("{}{}: {}", timestamp, level_str, message);
}

你可以使用如下方式调用这个函数:

fn main() {
    log_message("This is a debug message", LogLevel::DEBUG, true, LogLevel::DEBUG);
    log_message("This is an info message", LogLevel::INFO, false, LogLevel::INFO);
    log_message("This is a warning message", LogLevel::WARN, true, LogLevel::WARN);
    log_message("This is an error message", LogLevel::ERROR, false, LogLevel::ERROR);
}