MST

星途 面试题库

面试题:Rust闭包在矩阵加法运算中的应用

请用Rust编写一个函数,该函数接收两个矩阵(以二维数组形式表示)作为参数,利用闭包实现矩阵加法运算,并返回相加后的矩阵。假设两个矩阵具有相同的维度。请阐述闭包在这个过程中的优势以及如何实现类型推断。
42.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn add_matrices(matrix1: &[[i32]], matrix2: &[[i32]]) -> Vec<Vec<i32>> {
    let rows = matrix1.len();
    let cols = matrix1[0].len();
    let mut result = vec![vec![0; cols]; rows];

    for i in 0..rows {
        for j in 0..cols {
            let add = |a, b| a + b;
            result[i][j] = add(matrix1[i][j], matrix2[i][j]);
        }
    }

    result
}

闭包在这个过程中的优势

  1. 代码简洁:闭包允许将一个简单的操作(这里是矩阵元素相加)封装在一个紧凑的表达式中,使代码结构更清晰,无需定义额外的函数。
  2. 灵活性:闭包可以在需要的地方即时定义,并且可以捕获其定义环境中的变量,这在处理矩阵加法这种局部操作时非常方便。

类型推断的实现

在Rust中,闭包的类型推断非常强大。在上述代码中,闭包 let add = |a, b| a + b; 没有显式声明参数 ab 的类型。Rust能够根据闭包使用的上下文(matrix1[i][j]matrix2[i][j] 都是 i32 类型)推断出 ab 的类型为 i32,从而也推断出闭包的返回类型为 i32。这种类型推断机制使得代码更简洁,减少了冗余的类型声明。