MST

星途 面试题库

面试题:Rust闭包作为函数参数的复杂场景应用

假设有一个结构体`Point`,包含`x`和`y`两个`f64`类型的字段。编写一个函数,该函数接受一个闭包作为参数,闭包接受两个`Point`类型的实例,返回一个新的`Point`实例,其`x`和`y`分别是两个输入`Point`对应字段的乘积。请同时实现闭包逻辑,并展示如何调用这个函数。
24.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义结构体Point
struct Point {
    x: f64,
    y: f64,
}

// 定义接受闭包的函数
fn operate_on_points<F>(closure: F)
where
    F: Fn(Point, Point) -> Point,
{
    let p1 = Point { x: 2.0, y: 3.0 };
    let p2 = Point { x: 4.0, y: 5.0 };
    let result = closure(p1, p2);
    println!("Result: x = {}, y = {}", result.x, result.y);
}

fn main() {
    // 实现闭包逻辑
    let multiply_points = |p1: Point, p2: Point| Point {
        x: p1.x * p2.x,
        y: p1.y * p2.y,
    };

    // 调用函数并传入闭包
    operate_on_points(multiply_points);
}
  1. 首先定义了Point结构体,包含xy两个f64类型的字段。
  2. 然后定义了operate_on_points函数,该函数接受一个闭包作为参数,闭包接受两个Point实例并返回一个新的Point实例。
  3. main函数中,实现了闭包multiply_points,它将两个Point实例的对应字段相乘。
  4. 最后调用operate_on_points函数并传入multiply_points闭包。