fn add_matrices(matrix1: &Vec<Vec<i32>>, matrix2: &Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let mut result = Vec::new();
let add_row = |row1: &Vec<i32>, row2: &Vec<i32>| {
row1.iter().zip(row2.iter()).map(|(a, b)| a + b).collect()
};
for (i, row1) in matrix1.iter().enumerate() {
let row2 = &matrix2[i];
let new_row = add_row(row1, row2);
result.push(new_row);
}
result
}
闭包提高代码可读性和灵活性的阐述:
- 可读性:
- 通过定义闭包
add_row
,将矩阵行相加的逻辑封装起来,使得主函数add_matrices
的逻辑更加清晰。在add_matrices
函数中,通过调用add_row
闭包,可以很直观地看出是在进行矩阵行与行之间的加法操作,而不需要在主函数中嵌入复杂的行相加逻辑,提高了代码的可读性。
- 灵活性:
- 闭包
add_row
可以作为一个独立的单元使用。如果后续有其他矩阵操作也需要进行行相加操作,可以复用这个闭包,而不需要重复编写相同的逻辑。此外,如果行相加的逻辑发生变化,只需要修改闭包add_row
中的代码,而不需要在主函数的复杂逻辑中到处寻找相关代码片段进行修改,提高了代码的可维护性和灵活性。