Rust中闭包和函数类型推导的区别

15
为什么在 Rust 中可以推断闭包表达式的参数类型和返回类型,但是无法推断函数的类型?

之前Reddit上也有类似的问题被提出过(http://www.reddit.com/r/rust/comments/2bcof3/rust_type_inference_question_functions_vs_closures/)。 - huon
@dbaupp 这太巧了 :D - Viswanadh Kumar Reddy Vuggumud
1个回答

27

这只是一项设计决策:Rust采用局部类型推断,但不采用全局类型推断。理论上可以进行全局类型推断,但为了便于调试,Rust有意避免使用它,因为它可能导致极难调试的编译问题(例如,对此部分的轻微更改会导致内部深处的编译错误)。

函数是全局的 - 因此它们的类型签名必须是显式的。

闭包作为函数内部的局部变量,其类型可以被推断出来。(当然,如果您将一个闭包存储在结构体中,则需要在结构体的类型定义中明确指定其类型。)


2
有些函数是私有的,就像本地闭包一样。因此,推断私有函数的返回类型与本地闭包具有相同的值。 - EvanL00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接