4

http://diditwith.net上,我看到,在 F# 中,将参数传递给原本需要它们的函数并不是绝对必要的。该语言会自动将结果和输出参数填充到一个元组中。(!)

这是语言的一般机制的某种副作用(请原谅双关语),还是 F# 规范中专门阐明并故意编程到语言中的功能?

这是一个很棒的功能,如果它被明确放入 F# 中,那么我想知道这门语言中还有哪些其他类似的金块,因为我已经仔细研究了几十个网页并阅读了三本书(作者 D . Syme、T. Petricek 和 C. Smith),我完全没有看到提到过这个特殊的技巧。

编辑:正如 Petricek 先生在下文中所回应的那样,他确实在他的书Real-World Functional Programming中至少有两处提到了该功能。我的错。

4

2 回答 2

5

这不是 F# 语言中其他一些更通用的机制的副作用。

它是专门为此目的而添加的。.NET 库通常通过在方法签名的末尾添加out(或)参数来返回多个值。ref在 F# 中,返回多个值是通过返回元组完成的,因此将 .NET 样式转换为典型的 F# 模式是有意义的。

我不认为 F# 有很多类似的技巧,尤其是在互操作性方面,但您可以在此处此处浏览一些方便的片段。

我很快查了一下,Real-World Functional Programming 在第 88 页和第 111 页简要提到了这个技巧。)

于 2012-11-27T19:48:00.550 回答
3

这是使与 .NET 方法的互操作更愉快的特定功能 - 所有尾随参数都可以被视为返回值的一部分(但请注意,这只会影响尾随参数,因此具有 C# 签名的方法void f(out int i, int j)可以不能这样称呼)。

可以说,无论如何,out 参数只是解决 .NET 1.0 中缺少元组的一种方法。Nullable<_>如果它们针对框架的更高版本(通过使用类型或元组作为返回类型),那么使用它们的许多方法似乎可能会以不同的方式编写。

于 2012-11-27T19:46:37.103 回答