首页 > 代码库 > Lua 函数链功能
Lua 函数链功能
函数链
http://lua-users.org/wiki/FiltersSourcesAndSinks
A chain is a function that combines the effect of two (or more) other functions, but whose interface is indistinguishable from the interface of one of its components. Thus, a chained filter can be used wherever an atomic filter can be used. However, its effect on data is the combined effect of its component filters. Note that, as a consequence, chains can be chained themselves to create arbitrarily complex operations that can be used just like atomic operations.
DEMO
local function chain2(f1, f2) return function(chunk) local ret = f2(f1(chunk)) if chunk then return ret else return ret .. f2() end endendlocal filter = {}function filter.chain(...) local f = arg[1] for i = 2, table.getn(arg) do f = chain2(f, arg[i]) end return fendlocal function addOne( subject ) return subject + 1endlocal function minOne( subject ) return subject - 1endlocal nullFunc = filter.chain(addOne, minOne)local result = nullFunc(56)print(result)local nullFunc_1 = filter.chain(minOne, addOne)local result = nullFunc_1(6)print(result)
扩展
Filters can be seen as internal nodes in a network through which data flows, potentially being transformed along its way. Chains connect these nodes together. To complete the picture, we need sources and sinks as initial and final nodes of the network, respectively. Less abstractly, a source is a function that produces new data every time it is called. On the other hand, sinks are functions that give a final destination to the data they receive. Naturally, sources and sinks can be chained with filters.
Finally, filters, chains, sources, and sinks are all passive entities: they need to be repeatedly called in order for something to happen. Pumps provide the driving force that pushes data through the network, from a source to a sink.
http://lua-users.org/wiki/FiltersSourcesAndSinks
Lua 函数链功能