首先声明,绝不否认 Immutable.js 的作用,以及如果语言自身支持 immutable 的好处。
本文想说的是,大部分时间我们需要的不是对数据的封装,而是一个快速修改嵌套结构数据并返回新对象的方法。
和 Immutable.js 借鉴自 FP 一样,这里要说的方案 (SEC,Semantic Editor Combinators) 也是借鉴在之前的大牛在 FP 中的思考。
| function recurSolve(sum, coins) { | |
| var coins = coins.slice().sort(function (a, b) { return b - a; }); | |
| console.log(coins); | |
| var go = function (sum, coins) { | |
| if (sum === 0) return 1; | |
| if (coins.length === 0 || sum < 0) return 0; | |
| return go(sum - coins[0], coins) + go(sum, coins.slice(1)); | |
| }; | |
| return go(sum, coins); |
| 2016-12-06 03:29:15.940822 UTC | |
| 2016-12-06 03:29:15.963588 UTC | |
| 2016-12-06 03:29:15.969227 UTC | |
| 2016-12-06 03:29:15.969314 UTC | |
| 2016-12-06 11:29:15.971724 CST | |
| 2016-12-06 11:29:15.973697 CST | |
| "Tue, 6 Dec 2016 03:29:15 UTC" | |
| "Tue, 6 Dec 2016 11:29:15 CST" | |
| "Tue, 6 Dec 2016 11:29:15 " | |
| "Tue, 6 Dec 2016 03:29:15 UTC" |
| 2016-12-06 01:19:40.00319 UTC | |
| 2016-12-06 01:19:40.030091 UTC | |
| 2016-12-06 01:19:40.032538 UTC | |
| 2016-12-06 01:19:40.032581 UTC | |
| 2016-12-06 09:19:40.034801 CST | |
| 2016-12-06 09:19:40.035805 CST | |
| "Tue, 6 Dec 2016 01:19:40 UTC" | |
| "Tue, 6 Dec 2016 09:19:40 CST" | |
| "Tue, 6 Dec 2016 09:19:40 " | |
| "Tue, 6 Dec 2016 01:19:40 UTC" |
| from PIL import Image | |
| import sys, os | |
| QR_DIR = '.' | |
| try: | |
| b = u'\u2588' | |
| sys.stdout.write(b + '\r') | |
| sys.stdout.flush() | |
| except UnicodeEncodeError: | |
| BLOCK = 'MM' |
| Promise_Yaku = require 'yaku' | |
| Promise_Bird = require 'bluebird' | |
| Promise_Yaku.enableLongStackTrace() | |
| Promise_Bird.longStackTraces() | |
| test = (Promise) -> | |
| bar = -> JSON.parse('edf{23}') | |
| Promise.resolve() |
| Promise_Yaku = require 'yaku' | |
| Promise_Bird = require 'bluebird' | |
| Promise_Yaku.enableLongStackTrace() | |
| Promise_Bird.longStackTraces() | |
| test = (Promise) -> | |
| foo = -> Promise.reject "not catched" | |
| Promise.resolve() |