这是一个相当通用的问题,并不特定于任何一种语言。我不太明白将函数作为参数传递给另一个函数背后的意义。我知道如果一个函数foo1()
需要使用另一个函数返回的某些结果foo2()
,为什么不能将返回/更新的值按原样foo2()
传递给?foo1()
或者在另一种情况下,为什么不能在其中使用其结果foo2()
进行调用?foo1()
此外,当 afoo2()
作为参数传递给时,幕后会发生什么foo1()
?是foo2()
在执行之前foo1()
?
问问题
272 次
3 回答
2
一般来说foo2
,foo1
在foo2
需要foo2
对进步。
我认为sort()
列表上的函数/方法可能是最好的具体例子。考虑一个人员列表 - 您可能有理由希望按姓名的字母顺序,或按年龄,或按与给定点的地理距离或许多其他可能的顺序对他们进行排序。将每个这样的排序都包含为内置选项几乎是不切实际的sort()
:语言采用的通常方法是允许调用者提供一个函数作为参数,该函数定义列表项之间的排序。
于 2017-09-13T21:33:12.550 回答
0
原因有很多:
依赖注入:如果你传递了一个在生产环境中将使用数据库调用的方法,并且你使用不同的参数,你可以在单元测试时用一些模拟来替换它。
映射、过滤、减少:您可以将相同的方法应用于参数列表,以映射、过滤或减少它。
于 2017-09-14T13:35:14.593 回答
0
通常提供回调,或者将接口与实现分开。查找以下内容:
-
1. 依赖注入,2. 回调,3. 匿名函数(又名 Lambda),4. PIMPL 等
看看这本书,它被广泛用于使用 C 开发 TDD: https ://www.amazon.co.uk/Driven-Development-Embedded-Pragmatic-Programmers/dp/193435662X
于 2017-09-14T14:08:04.173 回答