在http://diditwith.net处,我看到,在F#中,并不是必须将参数传递给否则需要它们的函数。该语言将自动将结果和输出参数填充到元组中。 (!)
这是语言的一般机制的某种副作用(原谅双关语),还是F#规范中特别明确表达并故意编程成语言的特征?
这是一个很棒的功能,如果它被明确地放入F#中,那么我想知道这种语言中潜藏的其他金块是什么,因为我已经浏览了几十个网页并阅读了三本书(由D. Syme,T。Petricek和C. Smith撰写)我根本没有看到这个特别的提法。
编辑:正如Petricek先生在下面回答的那样,他确实在他的书“em> Real-World Functional Programming ”中至少提到了两个地方。我的坏。
答案 0 :(得分:5)
这不是F#语言中其他一些更通用的机制的副作用。
专门为此目的添加了它。 .NET库通常通过在方法签名末尾添加out
(或ref
)参数来返回多个值。在F#中,返回多个值是通过返回元组完成的,因此将.NET样式转换为典型的F#模式是有意义的。
我不认为F#会做很多类似的技巧,特别是在互操作性方面,但你可以浏览一些方便的片段here和here。
(我很快检查了,真实世界的功能编程在第88和111页简要提到了这个技巧。)
答案 1 :(得分:3)
这是使.NET方法的互操作更加愉快的一个特定功能 - 所有尾随参数都可以作为返回值的一部分处理(但请注意,这只会影响尾随参数,因此使用C#签名的方法)像void f(out int i, int j)
一样不能这样调用。)
可以说,无论如何,out参数只是解决.NET 1.0中缺少元组的一种方法。似乎许多使用它们的方法如果针对框架的更高版本(通过使用Nullable<_>
类型或元组作为返回类型),将以不同的方式编写。