[英]Typescript - Is there a way to make composition with functions with the same arguments?
[英]How to understand composition of functions with multiple arguments?
如:
var foo = function (a, b) { return a + b; };
var bar = function (a, b) { return a * b; };
var fn = _.compose([foo, bar]);
如何理解fn
?
這是行不通的。
首先, _.compose()
不采用數組。 它采用函數列表作為單獨的參數,如下所示:
var fn = _.compose(foo, bar);
然后,即使這樣做,也要使用下划線的_.compose()
,每個后續函數都將傳遞前一個函數的返回結果。 由於您的兩個函數都需要兩個參數並返回一個參數,因此這將不起作用。
如果您修復了將參數正確傳遞給_.compose()
,則將具有以下內容:
var foo = function (a, b) { return a + b; };
var bar = function (a, b) { return a * b; };
var fn = _.compose(foo, bar);
然后如果您使用fn
像這樣:
fn(2, 5);
它將嘗試執行:
foo(bar(2, 5));
打破這種分開, bar(2, 5)
將返回10
,所以你將不得不調用的結果foo(10)
但其產生NaN
,因為第二個參數foo()
是undefined
。
_.compose
專為列表中最后一個函數以外的函數而設計,這些函數對單個參數進行操作,該參數是列表中前一個函數的返回值。
顯示返回NaN
實際實現: http : //jsfiddle.net/jfriend00/xhbcdh9k/
compose
函數采用多個函數並返回一個函數。 因此,您可以這樣稱呼它: var fn = compose(foo, bar);
您可以將fn
視為調用bar
然后foo
的結果。 例如bar(foo());
您的函數不會編寫,因為foo
需要2個參數foo(a, b)
,但是bar
返回1個值。
[無恥的自我推銷]
我寫了一個小助手函數,其行為類似於compose,但還傳遞了其他參數:
const compound = (...fns) => (...args) =>
fns
.reverse()
.reduce((result, fn) => fn(...[result, ...args.slice(1)]), args[0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.