面试题答案
一键面试设计方案
- 在
module_a
中定义Trait
和generic_function
。 - 在
module_b
中通过type
关键字定义函数别名,同时要确保泛型类型参数和特质约束正确传递。 - 在主函数中从
module_b
导入函数别名并使用。
代码示例
// module_a.rs
pub trait Trait {
fn do_something(&self);
}
pub fn generic_function<T: Trait>(arg: &T) {
arg.do_something();
}
// module_b.rs
mod module_a;
use module_a::{generic_function, Trait};
// 定义函数别名
pub type AliasedFunction<T: Trait> = fn(&T);
pub const ALIASED_GENERIC_FUNCTION: AliasedFunction<Trait> = generic_function;
// main.rs
mod module_b;
struct MyType;
impl module_b::module_a::Trait for MyType {
fn do_something(&self) {
println!("Doing something!");
}
}
fn main() {
let my_type = MyType;
(module_b::ALIASED_GENERIC_FUNCTION)(&my_type);
}
在上述代码中:
module_a
定义了Trait
和generic_function
。module_b
通过type
定义了函数别名AliasedFunction
,并将generic_function
赋值给ALIASED_GENERIC_FUNCTION
。- 在
main.rs
中,实现了Trait
并调用了module_b
中导出的函数别名。