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

use*_*285 0 f# containers struct tuples

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

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

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

Tom*_*cek 5

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

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

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