【问题标题】:Can a non-generic struct implement a generic function in rust?非泛型结构可以在 rust 中实现泛型函数吗?
【发布时间】:2019-07-04 15:37:50
【问题描述】:

非泛型结构能否在 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);
}

有什么办法让它起作用吗?

【问题讨论】:

  • fn而不是struct定义泛型参数怎么样?

标签: generics syntax rust


【解决方案1】:

您只能为 impl 块声明类型变量,如果它用于类型本身。

但是,您也可以在单个方法中引入新的类型变量:

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 时都必须使用相同的闭包 - 不是很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多