6.5.2 C# 中的函数组合
来源:互联网 发布:程序员培训要多长时间 编辑:程序博客网 时间:2024/05/21 11:32
6.5.2 C# 中的函数组合
C# 中的函数组合是可能的,但它的使用非常有限。这是部分是由于在 C# 中,偏应用不能很容易使用,但更重要的是,因为大多数操作是写为成员,而不是函数。我们至少可以在 C# 中演示同样的想法。清单 6.18 显示了 Compose 方法的实现,以及使用它的示例。
Listing 6.18 Implementing and using the Compose method (C#)
static Func Compose(this Func f, Func g) {
return (x) => g(f(x));
}
// Using function composition in C#
Func square = (n) => n * n;
Func formatNum = (n) => n.ToString("E");
var data = new double[] { 1.1, 2.2, 3.3 };
var sqrs = data.Select(square.Compose(formatNum));
// Prints: "1.210000E+000"; "4.840000E+000"; "1.089000E+001"
foreach (var s in sqrs) Console.Write(s);
函数组合被实现为 Func 委托的扩展方法,因此,我们可以在函数值上调用它,取单个使用点表示法的参数值。在 F# 中,它是写成函数,有三个参数,虽然,它通常只用两个参数值。在 C# 中,我们必须将它实现作为一个方法,有两个显式返回 Func 委托的参数值。我们构建一个 lambda 函数,取一个参数值,调用我们组合的函数,并返回该函数作为委托。
为了测试这个方法,我们创建了两个想要组合的函数,在使用 Select 处理集合中的数字时,使用这个组合函数。没有显式指定 lambda 函数作为参数值,而是调用 Compose 来创建组合函数的值,并将其传递给 Select 方法。
在最后的几节中,我们已经看到很多有用的处理函数进是泛型,其中,有一些甚至有三个类型参数。在 F# 中,写这样的函数很容易,因为,我们不必要显式写出类型,类型推导已经自动推断出类型。是时候近距离看一下,这个机制是如何工作的。
- 6.5.2 C# 中的函数组合
- 6.5.2 C# 中的函数组合
- C#组合函数
- c#中的组合键
- c#中的组合控件
- 组合游戏中的SG函数
- 8.3.3.1 C# 中的组合行为
- 6.5.1 函数组合
- 6.5.1 函数组合
- vb.net中的一个组合函数
- 7.1.2 C# 中的函数式数据结构
- 7.1.2 C# 中的函数式数据结构
- C#中的函数指针
- C#中的构造函数
- C#中的时间函数
- C#中的随机函数
- C#中的函数重载
- C#中的构造函数
- in和exists
- Syncml example
- jgroups gossipRouter 报错 java.lang.RuntimeException: class for magic number -1 not found
- Syncml example
- 已知一个字串由GBK汉字和ansi编码的数字字母混合组成,编写c语言函数实现从中去掉所有ansi编码的字母和数字(包括大小写),要求在原字串上返回结果。 函数接口为:int filter_ansi(char* gbk_string) 注:汉字的GBK编码范
- 6.5.2 C# 中的函数组合
- dalvik对于Java方法调用的实现
- 浅克隆和深克隆
- CString和string的互相转换
- Oracle exp/imp备份(导出/导入备份)
- 简单介绍join,outer-join,semi-join,anti-join的区别
- 一个用CSS的下拉菜单样式
- 项目管理书籍推荐
- B/S结构JavaEE WebApp的全自动安装包制作心得