6.5.2 C# 中的函数组合

C# 中的函数组合是可能的。但使用非常有限,这是部分是由于在 C# 中散应用不能非常easy使用。但更重要的是,由于大多数操作是用成员来写的。而不是函数。但我们至少能够用 C# 演示相同的想法。清单 6.18 显示了 Compose 方法的实现,以及使用的演示样例。

清单 6.18实现并使用 Compose 方法 (C#)

static Func<A, C> Compose<A, B,C>(this Func<A, B> f, Func<B, C> g) {

return(x) => g(f(x));    [1]

}

// Using function composition in C#                   |

Func<double, double> square = (n)=> n * n;            |[2]

Func<double, string> formatNum = (n)=> n.ToString("E");  |

var data = new double[] { 1.1, 2.2, 3.3 };

var sqrs =data.Select(square.Compose(formatNum)); [3]

// Prints: "1.210000E+000";"4.840000E+000"; "1.089000E+001"

foreach (var s in sqrs) Console.Write(s);

函数组合被实现为 Func <T, R> 托付的扩展方法,因此,我们能够使用点表示法在函数值上调用,仅仅传递一个參数值;在 F# 中。这被写成有三个參数的函数,尽管,通常仅仅用到两个參数值。在 C# 中,我们必须将它实现作为有两个參数值的方法。显式返回 Func 托付。我们构建 lambda 函数。有一个參数值,调用将要组合的函数[1],并返回该函数作为托付。

为了測试这种方法,我们创建了两个想要组合的函数[2],在用 Select 处理集合中的数字时。使用组合函数。我们没有显式指定 lambda 函数作为參数值。而是调用 Compose 创建组合函数值。把它传递给 Select 方法[3]。

在最后几节中,我们已经知道,非常多实用的处理函数都是泛型,当中有些甚至有三个类型參数。

在 F# 中,写这种函数非常easy,由于。我们不必显式写出类型,由于类型判断已经自己主动判断出类型。因此。如今要近距离了解这种机制是怎样工作的。

6.5.2 C# 中的函数组合的更多相关文章

  1. 理解函数式编程中的函数组合--Monoids(二)

    使用函数式语言来建立领域模型--类型组合 理解函数式编程语言中的组合--前言(一) 理解函数式编程中的函数组合--Monoids(二) 继上篇文章引出<范畴论>之后,我准备通过几篇文章,来 ...

  2. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

  3. [Java 8] (10) 使用Lambda完成函数组合,Map-Reduce以及并行化

    好文推荐!!!!! 原文见:http://blog.csdn.net/dm_vincent/article/details/40856569 Java 8中同时存在面向对象编程(OOP)和函数式编程( ...

  4. Scalaz(14)- Monad:函数组合-Kleisli to Reader

    Monad Reader就是一种函数的组合.在scalaz里函数(function)本身就是Monad,自然也就是Functor和applicative.我们可以用Monadic方法进行函数组合: i ...

  5. JavaScript中Eval()函数的作用

    这一周感觉没什么写的,不过在研究dwz源码的时候有一个eval()的方法不是很了解,分享出来一起学习 -->首先来个最简单的理解 eval可以将字符串生成语句执行,和SQL的exec()类似. ...

  6. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  7. F# 可以把几个函数组合成新函数

    C#能做的,F#基本都能做,但F#能做的,C#未必能做. F#中的函数可以把几个函数组合起来使用.下面的例子是把由 function1 和 function2 这两个函数通过运算符“>>” ...

  8. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

  9. VBScript中Msgbox函数的用法

    MsgBox(prompt[, buttons][, title][, helpfile, context]) [用途]:弹出对话框,并获取用户的操作结果. [参数说明]: propmt:对话框中展示 ...

随机推荐

  1. bitset优化背包

    题目:https://agc020.contest.atcoder.jp/tasks/agc020_c 回忆下一题,是零一背包,主要的做法就是凑出最接近sum/2的价值,然后发现现在的背包的容量是20 ...

  2. js实现鼠标吸附线条效果

    如图,箭头→为鼠标位置,鼠标会带有吸附着一些线条的效果,具体效果可在我的博客查看,当然,这也是可很受欢迎很常见的效果了=3= <script> !function(){ function ...

  3. tp框架报错 Namespace declaration statement has to be the very first statement in the script

    Namespace declaration statement has to be the very first statement in the script tp框架报这个错误,错误行数就是nam ...

  4. UVA 11404 Palindromic Subsequence

    Palindromic Subsequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA ...

  5. Bootstrap组件之页头、缩略图

    .page-header--指定div元素包裹页头组件. <div class="page-header"> <h1>小镇菇凉<small> 2 ...

  6. iOS 开发仿网易云音乐歌词海报

    使用网易云音乐也是一个巧合,我之前一直使用QQ音乐听歌,前几天下 app 手机内存告急.于是就把QQ音乐给卸载掉了,正好晚上朋友圈里有一个朋友用网易云音乐分享了一首歌曲,于是我也就尝试下载了网易云音乐 ...

  7. Linux下永久改动MAC地址和ifconfig命令总结

    1. 固定一个MAC地址,特别是在使用多个虚拟机的时候 linux环境下: 用root身份登录,在/etc/rc.d/rc.local里加上这三句 ifconfig eth0 down ifconfi ...

  8. Java推断类和实例的关系

       通常我们使用instanceOf关键字来推断一个对象是否是类的实例,近期博主看到isInstance关键字,不解与instanceOf的差别,故度娘了一下,顺便涨了一下姿势.    Java中推 ...

  9. DGA ngram kmeans+TSNE用于绘图

    # -*- coding:utf-8 -*- import sys import re import numpy as np from sklearn.externals import joblib ...

  10. application和javaBean练习

    编写一个jsp程序,实现将用户信息保存在application对象的用户注册 package com.sp.test; public class User { private String usena ...