首页 > 寺庙

永恒不变|

永恒不变

函数是像类型一样的一等公民,图 2-2 中,行 1 定义了一个 swap 函数,交换二元组的元素位置。行 5 显示 swap 的函数定义,::符号前面是函数名称,后面表示函数定义,箭头可简单理解为一种函数映射,左边的 (b,a) 表示输入为一个二元组,右边的 (a,b) 说明通过函数映射,输出了交换位置后的二元组,a、b 分别代表了任意的类型。

永恒不变|

从该例中我们可以看到,抽象出来的交换位置算法不依赖于元组元素的类型,程序只有在调用 swap 函数时才会确定元组元素类型。最后看下 C# 的例子:

enter image description here图2-3 C# 值类型和引用类型泛型

C# 的泛型支持值类型,例如 int、long 等,以及引用类型。与 C++ 模版只是类似宏的编译器技术不同,C# 不仅仅在编译期进行类型检查,更是在运行期进行类型的转化。行 8 会在运行期生存一个 Stack 的类,并用整数替换 T,此后代码再次创建整数堆栈时,运行期(CLR)都会重用这个已创建的类。如果程序创建 long,double 等其值类型的堆栈,运行期都会首先新建 Stack 类,并用 long,double 替换 T。但对于引用类型,见行 11,运行时生成一个专用版 Stack 类,此类存储之后会被填写的引用类型,而不是存储数据。行 12 生成 Order 类型的堆栈时,运行期只是生成一个新的 Stack 类的实例,并填写 Order 的引用类型。

Java 泛型的前世今生

相比 C++、Haskell 等诞生时,C# 在 2.0 版本支持泛型,Java 的泛型发展的较为坎坷,目前最新的 JDK11 尚不支持基本


|永恒不变

   

永恒不变|
  • NASM汇编语言基础_子程序subroutines|
  • NASM汇编语言基础_子程序subroutines| | NASM汇编语言基础_子程序subroutines| ...

    永恒不变|
  • word怎么进行交叉引用|
  • word怎么进行交叉引用| | word怎么进行交叉引用| ...

    永恒不变|
  • java泛型中Field的get和set用法,Field的get和set怎么用|
  • java泛型中Field的get和set用法,Field的get和set怎么用| | java泛型中Field的get和set用法,Field的get和set怎么用| ...