面试题答案
一键面试use std::ops::Deref;
fn print_string<T: Deref<Target = str>>(s: &T) {
println!("{}", s.deref());
}
泛型约束处理不同类型参数通过Deref转换为&str
的情况
在泛型约束 T: Deref<Target = str>
中,T
表示任意类型,只要该类型实现了 Deref
trait 并且其 Target
类型为 str
,就可以作为参数传入 print_string
函数。这意味着无论是 &String
还是 &str
或者其他能够通过 Deref
强制转换为 &str
的类型都能满足这个约束。
这样做的好处
- 代码复用:通过泛型约束,我们可以编写一个函数来处理多种类型,而不需要为每种类型都编写一个单独的函数,提高了代码的复用性。
- 灵活性:允许函数接受更多类型的参数,使得函数的使用场景更加广泛,增强了代码的灵活性和通用性。
- 抽象层次提高:隐藏了具体类型的细节,只关注于类型能够提供的功能(即可以通过
Deref
转换为&str
),提高了代码的抽象层次,让代码结构更加清晰。