理解Ruby 程序块与Javascript 匿名函数
2012-10-05 17:43 h63542 阅读(630) 评论(0) 收藏 举报上篇《Ruby Module与Scala Traits区别》整理了了Ruby Module特性与Scala中Traits的区别,本文分析一下Ruby中重要特性代码块与Javascript中匿名函数的异同,整理如下:
Ruby是一门彻底的面向对象语言,本身不具备函数式语言的一些特性,在函数式编程中函数是语言一等公民(first class),函数可以作为参数、返回值等形式出现,而面向对象语言中是没有函数式编程中的函数概念,Ruby、java等面向对象语言中的函数总是和某个对象紧密结合,Ruby中的函数不能作为参数、返回值形式存在。
Ruby为了能够具备函数式编程中高阶函数的特性,引入了程序块(block)的概念,弥补面向对象语言特性的不足(Java中匿名类也算一种类似概念,但是比程序块复杂),从本质上讲Ruby中以程序块为参数的函数与函数式编程语言中高阶函数一样,都是支持接受函数作为参数的函数。
Javascript支持部分的函数式编程特性,Javascript中函数具备函数式编程对函数的定义,函数作为与基本类型同等地位的一等公民,可以作为变量、参数、返回值多种形式出现。
简单对比:
| 相同 | 不同 | |
| Javascript Function |
都为处理逻辑复用机制 都可以作为参数传递给方法 都支持闭包
|
需要function关键字声明
|
| Ruby Block | 不需要特殊关键字声明,只需要正常的do end包围或者{包围} |
Ruby程序块例子:
arr.each do |item| break if item > 2 puts item end
Javascript匿名函数例子:
var arr = [1, 2, 3, 4]; $.each(arr, function(index, value) { console.log(value); });
总体来说两者差异不大,可以说Ruby作为一门纯面向对象语言吸收了函数式编程中高阶函数的特性,使Ruby编程更加简洁和强大,而Javascript中函数特性为标准函数式编程特性
浙公网安备 33010602011771号