【问题标题】:F# and tuple outputF# 和元组输出
【发布时间】:2012-11-15 11:47:38
【问题描述】:

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

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

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

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

【问题讨论】:

标签: dictionary f# tuples


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    我不认为 F# 有很多类似的技巧,尤其是在互操作性方面,但您可以浏览一些方便的 sn-ps herehere

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

    【讨论】:

    • 谢谢 Tomas,抱歉,我忽略/忘记了您在您的精彩书中提到的技巧!
    • @MiloDC 谢谢你的好话!我很惊讶它没有被更突出地提及 :-) 这是一个很酷的功能!
    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多