Cognitect的Alex Miller说:Transducers和reader conditionals是Clojure 1.7最重要的两个特性。Transducers的目标是使不同的集合可组合算法转换,而reader conditionals可以用来改善Clojure跨JVM和JavaScript平台的可移植性。

\\

Transducers

\\

Transducers是一种减量函数转换器(reducing function transformers),获取一种减量函数并返回另一种的函数。减量函数仅仅是一种可以用来reduce的函数。Rich Hickey解释说:transducers的主要优势是它们允许分离三个主要问题:

\\

  • 减量函数是什么; \\
  • 应用在哪些集合中; \\
  • reduce的输入。 \

在Clojure 1.7中,为了支持Transducers,像map、cat、filter等大多数序列函数,在输入集合中都添加了一个新的参数。例如,

\\

(def tr1 (map f))

\\

将会返回一个map transducer。此外,Transducers可以通过Comp函数组合:

\\

(def xform (comp (filter odd?)(map inc)))

\\

来提供一个新的Transducers。一旦你有了一个Transducers,你可以把它应用在几个方面,例如矢量数据。

\\

(Sequence Xform data)

\\

使用Transducers函数替代sequence,你将会获得跟将reduce应用在data上同样的结果并获得组合函数原型。

\\

上面示例的主要好处是:如果使用简单的组合功能,当它运行时,仅仅建立一个lazy sequence而不是三个。

\\

Reader conditionals

\\

Reader conditionals是Clojure 1.7引入的一种新的格式,可以由Clojure和ClojureScript加载,并可以应用在.cljc文件语境中。把多个Clojure平台使用一种代码库作为目标的方法,使得拥有库和应用程序成为可能,并且Reader conditionals提供的机制让处理平台特定代码时更加容易。

\\

类似于cond形式,Reader conditionals表达式允许为每一个平台指定应该使用的平台特定代码。例如下面的表达式:

\\

[1 2 #?@(:clj [3 4] :cljs [5 6])]

\\

在Clojure上我们将会得到[1 2 3 4],在ClojureScript上是[1 2 5 6]。

\\

Clojure 1.7除了Transducers和Reader conditionals,还包含了更多新的特性和增强功能。

\\

查看英文原文:Clojure 1.7 Introduces Transducers, Improves Cross-platform Support

Clojure 1.7引入Transducers,提高跨平台支持度相关推荐

  1. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮、代码补全等...

    Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮.代码补全等-- 语法高亮.代码提示补全. ...

  2. Sublime Text 2 - 程序员必备神器!跨平台支持Win/Mac/Linux

    代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过 ...

  3. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux

    原文:http://www.iplaysoft.com/sublimetext.html 代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一 ...

  4. Lua sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux

    sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux [  编程开发,  编辑输入 -  Windows,  Mac,  Linux // 20 ...

  5. 用metaRTC(yangwebrtc)搭建跨平台支持嵌入式智能终端的双师课堂实现远程互动教学

    概述 教育均衡一直是我国需要解决的问题,国家一直在倡导利用双师课堂推进资源均衡化,双师课堂实现了一校带多校一师带多班模式,让教育不发达地区也享受着发达地区的师资资源. 用yangwebrtc搭建的支持 ...

  6. 太吾绘卷加载卡54_太吾绘卷支持度卡40%提高支持率解决办法分享

    太吾绘卷支持度卡40%如何提高支持率?很多的玩家对这个问题还不是很了解,下面电玩之家的小编为大家带来了太吾绘卷支持度卡40%支持率提高的攻略,感兴趣的玩家快来看看吧! 太吾绘卷支持率怎么提升? 有蛐蛐 ...

  7. Cocos引擎拥抱Xbox 跨平台支持再升级

    前言: 随着Xbox one正式进入中国市场,主机游戏的新浪潮正在汹涌袭来,势不可挡.无论你是知名工作室,或规模尚小的开发团队,甚至是单枪匹马闯江湖的独立制作人,都可以借助cocos引擎乘风破浪,迈出 ...

  8. qt quick-qml高德地图实现V1版本(跨平台支持、无需浏览器内核,运行迅速,下个版本实现位置搜索)

    1.效果图展示  gif如下所示(文件有点大,已压缩) 2.demo介绍 支持跨平台linux/windows等,qt插件方式,非浏览器加载 支持缓存保存离线地图实现 支持地图转向.旋转.方位调整等 ...

  9. 别纠结,提高代码整洁度也没那么难!

    作者 | Jonathan Fulton 译者 | 弯月,责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 几年前,我们曾遇到过重大的代 ...

  10. 网站哪些功能可以提高用户体验度?

    点击下方"青年码农"关注 回复"源码"可获取软件,源码等资料 ​ 网站用户体验是指用户在使用网站时所感受到的感觉和情感.它包括用户与网站的互动.使用过程中的舒适 ...

最新文章

  1. 9月机器学习开源项目Top10
  2. 关于数据表中插入数据报错(pymysql.err.IntegrityError) (1062, “Duplicate entry ‘0112‘ for key ‘‘teacher.PRIMARY‘“)
  3. 图解Linux最常用命令!秒懂!
  4. 个人贷款的条件、流程和注意事项
  5. 服务器装系统03系统,day03服务器操作系统安装
  6. 设计模式之_Strategy_03
  7. 【解决方案】pytorch中loss变成了nan | 神经网络输出nan | MSE 梯度爆炸/梯度消失
  8. of python检索文献 science web_查SCI文献,不知道检索方法怎么行!
  9. oracle事件跟踪器使用,Oracle 10046跟踪事件操作步骤
  10. python 去重 排序_python中sorted()和set()去重,排序
  11. 本科生计算机论文中文核心,本科计算机想投中文核心,求推荐刊物!
  12. sql分组排序取top n
  13. #7:怀念儿时的春节——9
  14. linux装软件需要root用户,Linux下非root用户安装软件的一般流程:
  15. Android之RemoteViews
  16. 【Python】networkx创建图(1)
  17. 使用ThreeJs从零开始构建3D智能仓库——第一章(一切的基础)
  18. 7-3 汉诺塔 (20 分)
  19. Codeforces Puzzles
  20. 浅析Draw Call

热门文章

  1. cannot import name 'StrictRedis' from 'redis'
  2. JS学习总结(8)——数组
  3. 【Arcpy】Arcpy核心
  4. java静态类堆栈_Java回归学习-面向对象内存分析-堆栈
  5. java 设置系统参数_Java设置系统参数和运行参数
  6. Struts2-02-OGNL及值栈
  7. Flutter 开发环境搭建Unable to ‘pub upgrade‘ flutter tool. Retrying in five seconds...
  8. Flutter监听网络变化
  9. ios md5 原理_iOS实现MD5加密
  10. BIGO 使用 Flink 做 OLAP 分析及实时数仓的实践和优化