1

这是一个相当通用的问题,并不特定于任何一种语言。我不太明白将函数作为参数传递给另一个函数背后的意义。我知道如果一个函数foo1()需要使用另一个函数返回的某些结果foo2(),为什么不能将返回/更新的值按原样foo2()传递给?foo1()或者在另一种情况下,为什么不能在其中使用其结果foo2()进行调用?foo1()此外,当 afoo2()作为参数传递给时,幕后会发生什么foo1()?是foo2()在执行之前foo1()

4

3 回答 3

2

一般来说foo2foo1foo2需要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 回答