面试题答案
一键面试实现思路
- 定义通用模块A:在模块A中定义通用的结构体和方法。
- 模块B复用模块A:在模块B中通过
use
语句引入模块A。 - 宏扩展:编写宏在模块B中根据需求对模块A的内容进行扩展。
关键代码示例
模块A代码(src/lib.rs
)
// 模块A定义通用结构体
pub struct CommonStruct {
pub data: i32,
}
// 模块A定义通用方法
impl CommonStruct {
pub fn new(data: i32) -> Self {
CommonStruct { data }
}
pub fn get_data(&self) -> i32 {
self.data
}
}
模块B代码(src/bin/main.rs
)
// 引入模块A
use crate::CommonStruct;
// 定义宏
macro_rules! extended_function {
($struct:ident) => {
impl $struct {
pub fn extended_method(&self) -> i32 {
self.get_data() * 2
}
}
};
}
fn main() {
let instance = CommonStruct::new(5);
println!("Original data: {}", instance.get_data());
// 使用宏进行扩展
extended_function!(CommonStruct);
println!("Extended data: {}", instance.extended_method());
}
在上述代码中,模块A定义了CommonStruct
结构体及其基本方法。模块B通过use
引入模块A,并使用宏extended_function
为CommonStruct
添加了新的方法extended_method
。