当前位置: 首页 > 知识库问答 >
问题:

rust中闭包和函数类型推断的差异

左宁
2023-03-14

为什么可以推断闭包表达式的参数类型和返回类型,而不是rust中的函数

共有1个答案

段超
2023-03-14

这只是一个设计决策:Rust使用局部类型推理,而不是全局类型推理。理论上进行全局类型推断是可能的,但是为了便于调试,Rust有意识地避开了它,因为它会导致极其难以调试的编译问题(例如,这一部分的微小变化会导致内部深处的编译错误)。

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

闭包在函数内部,是局部的——它们的类型可以被推断出来。(当然,如果您将闭包存储在结构中,则需要在结构的类型定义中显式指定它的类型。)

 类似资料:
  • 作为一个学习项目,我正在编写一个通过TCP的聊天服务器。我今天一直在修补ws crate,但我遇到了一个问题。这是我编写的代码,修改了他们的服务器示例。 当我尝试编译它时,我得到一个错误: 为什么会这样?我怎样才能解决这个问题?

  • 我正在尝试获取部分应用的函数的列表,如下所示: 编译器向我产生一个错误: 错误[E0277]:类型std::vec::Vec的值 随后的尝试也没有成功: 1. 也只有这一次尝试最终成功了! 为什么在动态闭包方面类型推断如此糟糕? 为什么在第一次尝试中不起作用? 有没有更好的方法来利用类型推理来表达这样的想法?

  • 问题内容: 在下面函数的第三行,出现以下错误: 无法在当前上下文中推断闭包类型 我该如何解决? 问题答案: 它不推断闭包类型的原因是因为未处理该语句。这意味着关闭预期会出现错误,但是在您的情况下,您忘记了规则。 因此,您可以尝试使用以下答案来捕获您的错误: 然后,您可以断言错误(用于测试),或者我个人会设置警报。 这样,应用程序不会崩溃,而是通知用户。我发现这在旅途中 非常 有用,而且我的设备未插

  • 我正在制作一种强类型的玩具函数式编程语言。它使用Hindley Milner算法作为类型推断算法。 在实现该算法时,我有一个问题,即如何推断相互递归函数的类型。 和是相互递归的函数。现在,当类型检查器推断函数的类型时,它也应该能够推断函数的类型,因为它是一个子表达式。 但是,在那一刻,函数还没有定义。因此,显然,类型检查器甚至不知道函数的存在,以及函数的类型。 真实世界的编译器/Inteprete

  • 我正在尝试将一个项目切换到Java8,并在日食月神和javac的类型推断之间遇到了奇怪的差异。使用JDK 1.7.0_65 javac,这段代码编译得很好。JDK 1.8.0_11 抱怨 toString(字符[]) 和 toString(可抛出)都匹配“toString(getKey(代码,空)]”行。日食 Luna 4.4 (I20140606-1215) 使用任一 JDK 愉快地编译它: 我

  • 我试图提出以下类型脚本类型断言函数的JavaScript JSDoc变体: 我想到了这个,但我得到了一个错误: 错误在调用站点:。下划线,错误消息如下: 是否可以开发这样的JSDoc函数,当传递时,仅使用TypeScript类型干扰和转义分析验证并返回作为提供的类型键入的未知对象? 一般来说,我对JSDoc不感兴趣,但特别是在Visual Studio代码中使用的JSDoc,TypeScript语