博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Clojure 1.7引入Transducers,提高跨平台支持度
阅读量:5869 次
发布时间:2019-06-19

本文共 1176 字,大约阅读时间需要 3 分钟。

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

\\

Transducers

\\

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

\\
  • 减量函数是什么; \\
  • 应用在哪些集合中; \\
  • 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,还了更多新的特性和增强功能。

\\

查看英文原文

转载地址:http://ooxnx.baihongyu.com/

你可能感兴趣的文章
SpringMVC中获得HttpRequest对象的方法
查看>>
Hadoop组件之-HDFS(HA实现细节)
查看>>
WPF的ControlTemplate和DataTemplate简介
查看>>
git代码提交方式
查看>>
怎样搭建本地svn服务器环境-轻松掌握版本管理
查看>>
装饰者模式
查看>>
Bash Shell 注释多行的几种方法(转)
查看>>
linux性能优化常用命令
查看>>
如何停止CSS3的动画?
查看>>
淘宝轮播
查看>>
typeid详解
查看>>
[Angularjs]ng-show和ng-hide
查看>>
Visual Studio 2015正式企业(Enterprise)版
查看>>
299. Bulls and Cows
查看>>
【iCore3 双核心板_FPGA】实验二十三:使用JTAG UART终端打印信息
查看>>
Web.xml详解(转)
查看>>
敏感性、特异性、假阳性、假阴性(sensitivity and specificity)
查看>>
软件开发工程师--经验之谈
查看>>
C#datagridView中嵌套控件
查看>>
java开发_mysql中获取数据库表描述_源码下载
查看>>