面试题答案
一键面试实现步骤
- 定义结构体:假设复杂数据结构如下:
struct Inner {
value: i32,
}
struct Outer {
inner: Inner,
another_value: i32,
}
- 编写常函数:
fn calculate_and_sum(data: &Outer) -> i32 {
let sum = data.inner.value + data.another_value;
sum
}
确保数据不可变性
- 使用不可变引用:在函数参数中使用
&Outer
,这样函数内部无法直接修改传入的数据结构。 - 禁止内部可变性:结构体内部成员如果是可修改的,需要确保在函数内部不会使用可修改的方式访问,例如避免使用
Cell
或RefCell
等提供内部可变性的类型。
常函数设计关键要点
- 函数签名:函数参数使用不可变引用,确保传入的数据在函数内不可修改。
- 功能单一性:常函数应专注于计算和汇总,避免引入副作用,如修改全局变量、进行I/O操作等。
- 可预测性:给定相同的输入,常函数应始终返回相同的输出,这样有利于代码的理解和测试。