F#什么时候应该使用元组?什么时候应该使用struct?

时间:2015-05-15 14:12:43

标签: struct f# tuples containers

F#元组和结构之间有什么根本区别。它们都可以容纳多个变量,但我只想知道何时使用另一个变量。

更具体地说,我试图通过一堆函数传递一堆参数,每次都会累积一个新变量。例如,我从param1开始并将其传递给返回的func1(param1,param2)。然后这个元组(或结构)被传递给func2,它返回(param1,param2,param3),依此类推。

我目前的想法是这样的:有一个元组,我总是可以持有适量的参数,但我放弃了统一的数据格式,最后,我必须打包并重新打包一个元组大约10个元素。使用结构,我的优点是参数的一致性,但问题是,我必须在开头指定参数。

1 个答案:

答案 0 :(得分:5)

在F#中,使用Tuple<T1, T2>表示元组,这是一种引用类型。另一方面,结构是值类型,因此它们在堆栈上而不是在堆上分配(有时可能更快)。所以我的一般规则是:

  • 元组在F#中有很好的语法支持,所以默认使用元组,因为它们使你的代码更好。在大多数情况下,性能类似,您不必担心它(它取决于使用 - 元组并不总是较慢)。
  • 当你的元组变得更复杂(比如超过3个元素)时,使用具有命名成员的类型(如记录或对象类型)是有意义的。
  • 在分配大量元组或结构时,最好使用结构。您可以定义自己的结构,也可以使用KeyValuePair<K, V>等标准.NET结构。

为了给出一个轶事证据,在Deedle中我们使用内部结构(时间序列存储为结构数组),但不是使用元组的公共API。