非泛型结构能否在 Rust 中实现泛型函数,其工作方式如下:
struct S;
impl <T> S {
fn do_something(value : T) {
//do something
}
}
fn main() {
let a = /*a value*/;
S::do_something(a);
}
如果不是,假设 S 实现了一个通用特征 Tt:
struct S;
impl <T> Tt<T> for S {
fn a_func(value : T) {
//do something
}
}
impl <T> S {
fn do_something(value : T) {
//do something
}
}
fn main() {
let a = /*a value*/;
S::do_something(a);
}
有什么办法可以让它发挥作用吗?
最佳答案
您只能为 impl
block 声明类型变量,前提是它在类型本身中使用。
但是,您也可以在各个方法上引入新的类型变量:
impl S {
fn do_something<T>(value: T) {
//do something
}
}
这对于作为闭包的参数来说尤其常见,因为每个闭包都有不同的类型,所以这对于您每次都能够使用不同的闭包调用方法是必要的。例如,Iterator::map
定义如下:
fn map<B, F>(self, f: F) -> Map<Self, F>
where
F: FnMut(Self::Item) -> B,
如果 F
是为类型而不是方法声明的,那么每次调用 map
时都必须使用相同的闭包 - 不是很有用。
关于generics - 非泛型结构可以在 Rust 中实现泛型函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56891094/