6.1 泛型高阶函数
来源:互联网 发布:淘宝网中老年女衬衫 编辑:程序博客网 时间:2024/06/05 16:52
6.1 泛型高阶函数
高阶函数是写泛型函数式代码的一种方法,就是说,相同的代码可针对许多类似但不同的目的重复使用。这是现代编程的关键,因为,它能够写更少的代码,通过构造(factoring)出计算的共同部分。
在函数编程和面向对象编程中的泛型代码
写泛型代码,通常要对值执行某个操作,但是,由于代码应该是通用的,因此,对值的类型不要有太多的限制,要允许代码进一步扩展的能力。
使用面向对象编程初步解决(但不总是最好)这个问题,是声明接口。分配给方法的实际值将具有接口所需的所有操作,因此,在这个值上,执行所需操作是可能的。C# 中的小例子,看起来可能像这样:
interface ITestAndFormat {
bool Test();
string Format();
}
void CondPrint(ITestAndFormat tf) {
if (tf.Test()) Console.WriteLine(tf.Format());
}
在函数编程中,处理泛型方法常规做法是,使用类型参数,能够处理任何类型。然而,我们并不知道,针对某个值到底能够执行什么操作,因为,类型参数可以被任何实际类型替代。结果,函数语言使用不同的方法描述操作:传递函数,处理额外的参数值。前面的示例的 C# 函数版如下所示:
void CondPrint<T>(T value, Func<T, bool> test, Func<T, string> format) {
if (test(value)) Console.WriteLine(format(value));
}
对于少数函数来说,这是一种非常有效的方法,因为,我们不需要事先声明接口;对于更复杂的函数,仍然可能要使用接口,我们将在第九章中看到。此外,调用函数更容易,因为,能够使用 lambda 函数实现操作。正如我们将在第 6.6 节中看到,在 F# 中,由于使用类型推断,写这样的代码将大为简化。
高阶函数对函数编程来说非常重要,很快我们将会看到,它们如何用于处理几种函数值。比如,补充材料“在函数编程和面向对象编程中的泛型代码”中的 CondPrint 方法,对我们来说很重要,因此,需要它看看在 F# 中如何能够实现。
高阶函数是写泛型函数式代码的一种方法,就是说,相同的代码可针对许多类似但不同的目的重复使用。这是现代编程的关键,因为,它能够写更少的代码,通过构造(factoring)出计算的共同部分。
在函数编程和面向对象编程中的泛型代码
写泛型代码,通常要对值执行某个操作,但是,由于代码应该是通用的,因此,对值的类型不要有太多的限制,要允许代码进一步扩展的能力。
使用面向对象编程初步解决(但不总是最好)这个问题,是声明接口。分配给方法的实际值将具有接口所需的所有操作,因此,在这个值上,执行所需操作是可能的。C# 中的小例子,看起来可能像这样:
interface ITestAndFormat {
boolTest();
stringFormat();
}
void CondPrint(ITestAndFormat tf) {
if(tf.Test()) Console.WriteLine(tf.Format());
}
在函数编程中,处理泛型方法常规做法是,使用类型参数,能够处理任何类型。然而,我们并不知道,针对某个值到底能够执行什么操作,因为,类型参数可以被任何实际类型替代。结果,函数语言使用不同的方法描述操作:传递函数,处理额外的参数值。前面的示例的 C# 函数版如下所示:
void CondPrint<T>(T value, Func<T,bool> test, Func<T, string> format) {
if(test(value)) Console.WriteLine(format(value));
}
对于少数函数来说,这是一种非常有效的方法,因为,我们不需要事先声明接口;对于更复杂的函数,仍然可能要使用接口,我们将在第九章中看到。此外,调用函数更容易,因为,能够使用 lambda 函数实现操作。正如我们将在第 6.6 节中看到,在 F# 中,由于使用类型推断,写这样的代码将大为简化。
高阶函数对函数编程来说非常重要,很快我们将会看到,它们如何用于处理几种函数值。比如,补充材料“在函数编程和面向对象编程中的泛型代码”中的CondPrint 方法,对我们来说很重要,因此,需要它看看在 F# 中如何能够实现。
- 6.1 泛型高阶函数
- 6.1 泛型高阶函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- C++ 内存池 -- C++ Memory Pool
- 第九周项目五程序填充问题
- NSdata 与 NSString,Byte数组,UIImage 的相互转换
- 单块读
- StorSimple 简介
- 6.1 泛型高阶函数
- SSM框架Web程序的流程(Spring SpringMVC Mybatis)
- error LNK2019: 无法解析的外部符号 __imp__DispatchMessageW@4,该符号在函数 _WinMain@16 中被引用
- 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.OLE.Interop.IServiceProvider”。
- BOOST库介绍,安装
- JS进阶书籍
- 【Java】Given two binary strings, return their sum
- 【IOS】Ready
- awr报告生成