2017-09-13 127 views
1

這是一個相當普遍的問題,並不特定於任何一種語言。我不太明白將函數作爲參數傳遞給另一個函數的意思。我知道如果一個函數,例如foo1()需要使用另一個函數foo2()返回的某個結果,爲什麼foo2()返回/更新的值不能按原樣傳遞給foo1()?或者在另一種情況下,爲什麼foo2()foo1()內被調用,其結果在其中被使用? 當foo2()作爲參數傳遞給foo1()時,發生什麼情況? foo2()是否在foo1()之前執行?將函數作爲參數傳遞給其他函數的背後是什麼?

+0

看看這個,它可能是有用的:https://softwareengineering.stackexchange.com/questions/253868/passing-functions-into-other-functions-as-參數不良練習 –

+0

基本上沒有r重申所有這些聯繫,這是高階功能所必需的。 [map](https://en.wikipedia.org/wiki/Map_(higher-order_function))和[reduce](https://en.wikipedia.org/wiki/Fold_(higher-order_function))是常見的例子。 –

+0

@ Don'tPanic雖然該鏈接提供了很多吸收,我不認爲我還是很瞭解這一點。 :/ – alannaC

回答

2

一般來說,你傳遞一個函數foo2在案件的函數foo1其中foo2多種評估是必要的 - 你或許事先不知道什麼參數將被用於foo2每次調用,所以安:我不可能提前自己打電話。

我認爲列表上的一個sort()函數/方法可能是最好的具體示例。考慮一下人員列表 - 您可能會合理地按名稱按字母順序排列,或按年齡數字排序,或與給定點的地理距離或許多其他可能的排序。將每個這樣的排序作爲內置選項包括到sort()中都是不實際的:語言採用的通常方法是允許調用者提供函數作爲參數,該參數定義列表項目之間的排序。

0

原因是多方面的:

依賴注入:如果你通過在生產中會使用一個數據庫調用的方法,以及你使用不同的參數使用它,你可以做一些模擬時,單元測試替代它。

映射,過濾器,減少:您可以將相同的方法應用於參數列表,將其映射,過濾或減少參數。

相關問題