Curry Function是個「將一個接受 n 個參數的 function,轉變成 n 個只接受一個參數的 function」的過程,JavaScript的Array就是經典的Curry Function表現,範例如下:
let boys = ['boy', 'girl'].concat(['boy', 'girl']).filter(s => s === 'boy')
let line = {
input: 'function',
output: 'function',
layout: 'tools',
install: 'function',
request: 'array',
response: 'string'
}
每次執行時Store都會是一個全新的對象,Tool則會永久保持最後設定的狀態。
const group = {
tools: {
sum: {
handler: (self, v1, v2) => self.success(v1, v2)
}
},
lines: {
math: {
request: ['number'],
response: 'number',
install({ include }) {
include('sum').tool('sum')
},
input(self, value) {
self.store.value = value
self.success()
},
output(self) {
self.success(self.store.value)
},
layout: {
add: {
request: ['number'],
handler(self, value) {
self.tool('sum')
.action((error, result) => {
self.store.value = result
self.success()
})
}
},
double: {
handler(self) {
self.store.value *= 2
self.success()
}
}
}
}
}
}
packhouse.addGroup('math', () => {
return {
data: group
}
})
packhouse
.line('math/math')(10)
.add(5)
.add(10)
.double()
.action((error, result) => {
console.log(result) // 50
})