面试题答案
一键面试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
}
闭包在这个过程中的优势
- 代码简洁:闭包允许将一个简单的操作(这里是矩阵元素相加)封装在一个紧凑的表达式中,使代码结构更清晰,无需定义额外的函数。
- 灵活性:闭包可以在需要的地方即时定义,并且可以捕获其定义环境中的变量,这在处理矩阵加法这种局部操作时非常方便。
类型推断的实现
在Rust中,闭包的类型推断非常强大。在上述代码中,闭包 let add = |a, b| a + b;
没有显式声明参数 a
和 b
的类型。Rust能够根据闭包使用的上下文(matrix1[i][j]
和 matrix2[i][j]
都是 i32
类型)推断出 a
和 b
的类型为 i32
,从而也推断出闭包的返回类型为 i32
。这种类型推断机制使得代码更简洁,减少了冗余的类型声明。