写点什么

从 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:501026
用户头像

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

关注

评论

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

Camtasia局部放大特效教程

淋雨

Camtasia 录屏

规格模式(Specification Pattern)

Tom弹架构

Java 架构 设计模式

雇工模式(Employee Pattern)

Tom弹架构

Java 架构 设计模式

25 K8S之Endpoint对象

穿过生命散发芬芳

k8s 11月日更

Go语言学习查缺补漏ing Day7

Regan Yue

Go 语言 11月日更

按需引入ant-design-vue组件

石云升

Vue 11月日更

简述以太坊P2P网络之UDP

devpoint

区块链 以太坊 udp 11月日更

在线文本对比工具

入门小站

工具

Pulsar 在2.8升级过程中需要注意的TopicPolicy问题

Zike Yang

Apache Pulsar 11月日更

Flink Forward Asia 2021 延期,线上相见

Apache Flink

大数据 flink 编程 后端 实时计算

面试不慌,拿这70张思维导图,怒怼面试官

奔着腾讯去

c++ golang 数据结构 思维导图 TCP/IP

不是吧,都2021年了你别说你还不会Spring MVC基本应用

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

低代码实现探索(二)低代码中的数据

零道云-混合式低代码平台

低代码

字节大牛把算法常见面试:哈希、链表、队列、递归全部总结出来了

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

看完了阿里大牛的Leetcode刷题笔记, 我成功拿到了字节跳动的offer

热爱java的分享家

Java 面试 算法 LeetCode 经验分享

区块链将掀开人类的伟大时代

CECBC

空对象模式(Null Object Pattern)

Tom弹架构

Java 架构 设计模式

萝卜快跑:迎来首单业绩兑现,商业化试点服务进程进入新阶段

脑极体

阿里大牛最新公开压轴的“Redis深度笔记”,GitHub已标星81.6K

热爱java的分享家

Java 架构 面试 程序人生 编程语言

数字人民币的基础:共识与信任!

CECBC

低代码实现探索(一)组件元信息定义

零道云-混合式低代码平台

低代码

终于有腾讯架构师把困扰我多年的《计算机网络原理》全部讲明白了

热爱java的分享家

Java 面试 编程语言 网络协议 经验分享

【死磕Java并发】-----J.U.C之重入锁:ReentrantLock

chenssy

11月日更 死磕 Java 死磕 Java 并发

修复一个BaseRecyclerViewAdapterHelper漏洞

Changing Lin

11月日更

【高并发】浅谈AQS中的ReentrantLock、ReentrantReadWriteLock、StampedLock与Condition

冰河

Java 并发编程 多线程 高并发 异步编程

对元宇宙 我们期待什么?

CECBC

对象池模式(Object Pool Pattern)

Tom弹架构

Java 架构 设计模式

Spring Boot的前世今生以及它和Spring Cloud的关系详解

Java高级开发

Java 架构 springboot SpringCloud

linux重要的目录之etc

入门小站

Linux

Prometheus Exporter (十一)Kafka Exporter

耳东@Erdong

kafka Prometheus exporter 11月日更

Linux 中的 15 个强大的 firewall-cmd 命令,牛牛牛!

Ethereal

Linux 运维 防火墙 Firewalld防火墙

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