面试题答案
一键面试// 定义一个trait,用于指定类型需要实现的方法
trait Printable {
fn print_info(&self);
}
// 定义泛型函数,参数类型为实现了Printable trait的类型
fn operate_on<T: Printable>(arg: &T) {
// 调用trait方法执行操作
arg.print_info();
}
// 定义一个结构体并实现Printable trait
struct ExampleStruct {
value: i32,
}
impl Printable for ExampleStruct {
fn print_info(&self) {
println!("The value is: {}", self.value);
}
}
函数定义
- 泛型参数声明:在函数名后的尖括号
<>
中声明泛型参数T
。 - trait约束:使用
T: Printable
语法指定T
类型必须实现Printable
trait。这确保了传入的参数类型有我们期望的print_info
方法。
参数处理
- 参数类型:函数接受一个类型为
&T
的参数,这里&
表示借用,避免在函数调用时发生所有权转移。 - 调用方法:在函数体中,通过
arg.print_info()
调用Printable
trait中定义的方法,从而对参数执行操作。
确保正确编译和运行
- trait实现:为使用泛型函数的具体类型(如
ExampleStruct
)实现Printable
trait,提供print_info
方法的具体实现。 - 类型检查:Rust编译器在编译时会检查传入泛型函数的参数类型是否实现了
Printable
trait,确保代码的类型安全性。
你可以这样调用函数:
fn main() {
let example = ExampleStruct { value: 42 };
operate_on(&example);
}
这段代码定义了一个泛型函数operate_on
,它对实现了Printable
trait的类型执行打印操作,并且展示了如何为特定类型实现该trait并调用泛型函数。