最近奇忙。从早到晚工作。别说写博客,连读博客都 没有时间。虽然一直想八卦一下JavaScript那浓眉大眼的也背叛革命了这件大事,却抽不出空。不过看到这么精彩的代码,还是忍不住转载。起因是这样的:大家都熟悉fold函数,也就是Ruby里常用的inject()函数:给出起始值,把某个Collection里的值叠加上去。比如说,给出起始值0,累加数组[1, 2, 3, 4, 5]: [1, 2, 3, 4, 5].inject(0){|sum, n| sum = sum + n}有了fold,便有相反的unfold:把单个的对象映射到Collection上。比如说 10.unfold { |n| n-1 unless n == 1 }.inspect => [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]10.class.unfold(&:superclass).inspect => [Fixnum, Integer, Numeric, Object]它的实现也出奇地漂亮:通过递归把unfold调用改写为数组操作。颇有term re阅读全文>
发表于 @ 2007年11月08日 14:52:00|评论(loading...)|编辑