元组——秃瓢(Tuple)
元组在编程里面出现最早是在函数式语言。而现在python、C#、VB.net、Java、Go等等已经广泛应用。元组有如下特性:
1、元组里面的成员都是只读的。
2、元组成员支持泛型,甚至可以衔套另一个元组。
元组刚引入C#的时候,大多数人都把它当作out的语法糖。然而,它有自身存在的意义。作为函数的多返回值的时候,相对out而言,除了可读性更佳,元组以其不可变值的特性,贯彻了“使用不变值,尽可能避免使用变量”,这一函数式编程的原则——呃...与其这样说,不如说是out直接破坏了这个原则。
另外,元组也可以当成简单的结构来使用,在不能使用匿名结构,又不想声明一个有名字结构的时候,元组是折中、便捷的方法。
然而作为一种外来的方法,C#上面使用元组就不像F#那么自然,(VB以及Java亦然)。
F#:
let (a,b) = (15, 16)
Debug.WriteLine("a={0} b={1}", a, b)
C#:
var t = Tuple.Create(15, 16);
Debug.WriteLine("a={0} b={1}", t.Item1, t.Item2) ;
以上两代码等价,然而F#可以在使用元组的时候对个别元素进行命名,而C#只能调用其中的Item1、Item2。
元组在F#和C#之间的区别不仅如此,原生F#支持2个以上的成员,而C#上,元组只能靠.net的Tuple类实现,有1到8个成员的限制。1个成员的元组是很奇怪的,它根本没有什么实际意义。在F#上,
let a = (19)
或者
let (a) = (19)
都无法得到一个单一元素的元组,只能靠.net框架,或者其他间接方法。