rust - 将闭包指定为返回类型的替代方法?

这个函数返回一个闭包。使用 impl Fn() 作为闭包类型是可以的:

fn foo() -> impl Fn() {
    || ()
}

但这行不通:

fn foo<T: Fn()>() -> T {
    || ()
}

也不是这个:

fn foo<T>() -> T
where
    T: Fn(),
{
    || ()
}

为什么最后两个例子不起作用?

最佳答案

在这两个“非工作”示例中,思考为什么 T 被称为类型参数 可能会有所帮助。

函数的参数由函数的调用者决定,类型也是如此。有时它们是明确指定的,有时它们是推断出来的,但总是由调用者说出它们是什么,并且实现必须适用于所有可能的类型。这有时称为通用量化(在数学中,∀T)。

但是,您的示例中的闭包类型不能由调用者提供,因为它是函数体的实现细节。闭包的类型由函数固定,调用者指定不同的类型没有意义。

在您的第一个示例中,它之所以有效,是因为返回位置中的 impl Fn() 意味着正在发生的事情。也就是说,从调用者的角度来看,具体类型是未知的,但它是由实现唯一确定的。这被称为存在量化(在数学中,∃T)——一种我们可以确信存在的类型,尽管我们不一定知道它到底是什么。

https://stackoverflow.com/questions/74205672/

相关文章:

regex - 使用 awk 只包含以特定值开头的列?

nlp - 自然语言中的范围歧义

c++ - 为什么即使还有弱指针,make_shared 也会调用析构函数?

c++ - 使用 enable_if 对类方法进行部分模板特化

java - 流迭代不使用最后一个值

user-interface - 愚蠢且令人沮丧的跨浏览器 UI 问题

performance - Oracle/PLSQL 性能

.net - 投票 : What do you call your business layer b

java - @EnableGlobalMethodSecurity 在新的 spring boot

r - 与 R 中的日期相关联的条件累积和