2011-02-15 46 views
0

武装与underscore功能,我可以实现奇妙的东西象下面这样:取代红宝石风格的块

_([1,2,3]).chain().map(function(n) {return n*2}).reduce(function(m,a) {return m +a},0).value() 

显然,最详细的部分是function定义。它会更简单吗?喜欢的东西:

_([1,2,3]).chain().map({|n| return n*2}).reduce({|m,a| return m+2; },0).value() 

回答

2

如果你乐于以书面形式紧凑函数式编程,检查Functional(警告:它采用非面向对象的方法):

JS> reduce('+', 0, map('*2', [1, 2, 3])) 
12 

这感觉就像你正在编写哈斯克尔;-)

Haskell> foldl (+) 0 (map (*2) [1, 2, 3]) 
12 
1

如果您正在使用CoffeeScript你可以使用匿名函数写

_([1,2,3]).chain().map((n) -> n*2).reduce((m,a) -> m+2, 0).value() 

JavaScript当然没有块。