5.2.1.1 用元组代替 out 参数
如果确实想,那么,F# 也可以使用 out 参数,但是,元组通常是首选,因为,F# 自动将有 out 参数的 .NET 方法暴露成返回元组的方法,因此,不需要做任何事情,完全是透明的。这就是说,F# 代码看起来仍然像惯用的函数代码,即使调用的.NET 代码没有元组的概念。在 .NET 中,最广泛使用的、有 out 参数的方法可能是 TryParse,用于所有的数值类型,比如,Int32;如果要在 F# Interactive 中使用这个方法,首先需要打开 System 命名空间。我们来看一个在 C# 中使用的示例(使用out 参数):
int parsed;
bool success =Int32.TryParse("41", out parsed);
以及 F# 的示例(使用元组)
let (success, parsed) = Int32.TryParse("41");;
F# 版本写起来相当容易,看起来更像“函数式”,因为,它避免了把参数值作为引用传递给可变的变量。在这个示例中,我们使用模式匹配,解析返回的元组;如果想完全忽略成功的标记,也可以使用 snd 函数,只挑选返回元组中的数值。当解析失败时,返回的将是这个类型的默认值,即 0;另外,我们也可以写一个工具函数,指定默认值。我们将在下一章学习写这样的函数。
现在,在学习使用 F# 元组的最佳实践之前,要暂时回到有关值与类型的讨论,重温元组类型,以及这些类型的值如何构造的。