MST

星途 面试题库

面试题:Rust闭包在泛型和trait中的应用

假设你正在编写一个通用的排序函数,要求使用闭包来定义比较逻辑。请实现一个泛型函数,该函数接受一个实现了`Ord` trait的类型的切片和一个闭包作为参数,闭包用于定义两个元素的比较逻辑。同时说明如何为这个闭包定义合适的trait bound。
22.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn sort_with_comparator<T: Ord>(slice: &mut [T], comparator: impl Fn(&T, &T) -> bool) {
    slice.sort_by(|a, b| {
        if (comparator)(a, b) {
            std::cmp::Ordering::Less
        } else {
            std::cmp::Ordering::Greater
        }
    });
}

对于闭包的trait bound,这里使用 impl Fn(&T, &T) -> bool,表示闭包接受两个指向 T 类型的引用,并返回一个布尔值。其中 Fn 是Rust中用于表示可调用闭包的trait,通过这种方式,我们可以确保传入的闭包具有正确的签名,以便在 sort_by 函数中作为比较逻辑使用。