写点什么

从 F#中借用函数化 API

  • 2007-11-21
  • 本文字数:555 字

    阅读完需:约 2 分钟

通用语言规范(Common Language Specification,CLS)确保任何具有一致性的.NET 语言能访问被其他语言创建的函数库。这意味着命令式的语言,如 VB 和 C#,能调用主要为 F#创建的函数化函数库。实际上,许多都能直接地转换为 C#代码。

Dustin Campbell 通过演示一个能被大量简化的 C#表达式是如何地简单来说明这种方式。它以如下代码开始:

int[] a = new int[20];
for (int x = 0; x < a.Length; x++)
a[x] = x + 1;

如果写成 F#即是:

let a = Array.init 20 (fun x -> x + 1)

不使用特殊的代码技巧,F#代码可以表述为(以一种更声明化的方式),“创建一个有 20 个元素的数组,并使用这个函数初始化每个元素。”F#版本一个有趣的特性是数组的类型不需要声明。因为编译成能推断传递到函数的结果(fun x -> x + 1)将会是整数,“a”必须是一个整数数组。

对我来说,这代码是那样的优美。另外,这是声明式的而非命令式;它描述什么将被完成而不是明确地规定将如何完成。 当我看到如此简练的代码,我立刻开始试图想找到 F#中的那些方面,有助提高我日常工作中的 C#代码的书写效率。

Dustin 继续展示了一个 C#函数,允许使用这样的语法。

var a = ArrayEx.Create(20, x => x + 1);

需要提醒的是这样的技术在 VB 中同样可以工作。

查看英文原文: http://www.infoq.com/news/2007/11/Functional-CSharp

2007-11-21 07:50929
用户头像

发布了 254 篇内容, 共 59.4 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

Kubernetes故障排查eBPF

CTO技术共享

开源 ebpf 签约计划第三季 8月月更

一起学习集合框架之 TreeSet

宇宙之一粟

Java 8月月更

Kubernetes构建Redis 集群

CTO技术共享

redis 开源 签约计划第三季 8月月更

Kubernetes 调度器优化

CTO技术共享

开源 Kubernetes 集群 签约计划第三季

C++为什么始终无法取代 C 吗?

Jackpop

关于 SAP UI5 floating footer 显示与否的单步调试以及使用 SAP UI5 的收益

汪子熙

前端开发 SAP SAP UI5 ui5 8月月更

如何克服紧张

踏雪痕

Docker基础:Docker 常用命令梳理

天使不哭

#开源 8月月更

VS Code如何打造C/C++开发环境?

Jackpop

头脑风暴:零钱兑换

HelloWorld杰少

8月月更

C++ 中的四种智能指针

桑榆

c++ 8月月更

钝感力与自我和解

Amazing_eve

#开源

Python 教程之输入输出(5)—— input() 函数中的漏洞 – Python 2.x

海拥(haiyong.site)

Python 8月月更

Kubernetes内存泄露怎么玩

CTO技术共享

开源 内存泄漏 签约计划第三季 8月月更

C++深拷贝与浅拷贝,初始化列表,对象成员,静态成员相关分析

CtrlX

8月月更

Linux的难题,终于有解了!

Jackpop

文本词频统计的利器 Trie树

Five

c 算法题 8月月更

Go-Excelize API源码阅读(一)——NewFile()

Regan Yue

Go 开源 源码刨析 8月月更

Kubernetes网络模型

CTO技术共享

开源 Kubernetes 集群 签约计划第三季 8月月更

为什么互联网大厂一边疯狂裁员,一边不停招聘?

Jackpop

Kubernetes信息安全

CTO技术共享

开源 信息安全 Kubernetes 集群 签约计划第三季 8月月更

Kubernetes 实现灰度和蓝绿发布

CTO技术共享

开源 灰度发布 蓝绿发布 签约计划第三季 8月月更

电动汽车充电站的部署优化策略

乌龟哥哥

8月月更

百家号打击挂载恶意导流链接行为,必须严厉打击恶意挂链灰产

石头IT视角

SRE运维解密-服务质量目标:SLI,SLO,SLA

董哥的黑板报

微服务 运维 云原生 SRE Google

Service Mesh迁移原则

阿泽🧸

Service Mesh 8月月更

gulp 的常用 API

Jason199

js gulp 8月月更

系统管理-Linux重定向与管道

Albert Edison

Linux centos 运维 服务器 8月月更

开源一夏 | jQuery 密码验证和深入理解JSONP【前端jQuery框架】

恒山其若陋兮

开源 8月月更

架构实战营课程学习感受

极客土豆

SRv6网络典型部署场景

穿过生命散发芬芳

8月月更 SRv6

从F#中借用函数化API_.NET_Jonathan Allen_InfoQ精选文章