将函数作为参数传递给其他函数有什么意义?
What's the point behind passing functions as arguments to other functions?
这是一个相当通用的问题,并不特定于任何一种语言。我不太明白将一个函数作为参数传递给另一个函数背后的意义。我明白如果一个函数,比如说,foo1()
需要使用另一个函数 foo2()
返回的一些结果,为什么 foo2()
的值 returned/updated 不能传递给 foo1()
原样?或者在另一种情况下,为什么不能在 foo1()
中调用 foo2()
并在其中使用其结果?
另外,当 foo2()
作为参数传递给 foo1()
时,幕后会发生什么? foo2()
是否在 foo1()
之前执行?
一般来说,在需要多次计算 foo2
的情况下,您将函数 foo2
传递给函数 foo1
- 您可能事先不知道什么foo2
的每次调用都会使用参数,所以您不可能提前自己执行调用。
我认为列表中的 sort()
function/method 可能是最好的具体示例。考虑一个人物列表——您可能有理由希望按姓名字母顺序对他们进行排序,或按年龄数字排序,或按与给定点的地理距离排序,或许多其他可能的顺序。将每个这样的排序都包含为 sort()
的内置选项几乎是不切实际的:语言通常采用的方法是允许调用者提供一个函数作为参数,该函数定义列表项之间的排序.
原因有很多:
依赖注入:如果您传递的方法在生产中将使用数据库调用,并且您使用它时带有不同的参数,则可以在单元测试时将其替换为一些模拟。
映射、过滤、减少:您可以将相同的方法应用于参数列表,对其进行映射、过滤或减少。
通常用于提供回调,或者将接口与实现分离。查找以下内容:
1.依赖注入,
2.回调,
3.匿名函数(又名Lambdas),
4. 粉刺
ETC
看看这本书,它广泛用于使用 C 开发 TDD:
https://www.amazon.co.uk/Driven-Development-Embedded-Pragmatic-Programmers/dp/193435662X
这是一个相当通用的问题,并不特定于任何一种语言。我不太明白将一个函数作为参数传递给另一个函数背后的意义。我明白如果一个函数,比如说,foo1()
需要使用另一个函数 foo2()
返回的一些结果,为什么 foo2()
的值 returned/updated 不能传递给 foo1()
原样?或者在另一种情况下,为什么不能在 foo1()
中调用 foo2()
并在其中使用其结果?
另外,当 foo2()
作为参数传递给 foo1()
时,幕后会发生什么? foo2()
是否在 foo1()
之前执行?
一般来说,在需要多次计算 foo2
的情况下,您将函数 foo2
传递给函数 foo1
- 您可能事先不知道什么foo2
的每次调用都会使用参数,所以您不可能提前自己执行调用。
我认为列表中的 sort()
function/method 可能是最好的具体示例。考虑一个人物列表——您可能有理由希望按姓名字母顺序对他们进行排序,或按年龄数字排序,或按与给定点的地理距离排序,或许多其他可能的顺序。将每个这样的排序都包含为 sort()
的内置选项几乎是不切实际的:语言通常采用的方法是允许调用者提供一个函数作为参数,该函数定义列表项之间的排序.
原因有很多:
依赖注入:如果您传递的方法在生产中将使用数据库调用,并且您使用它时带有不同的参数,则可以在单元测试时将其替换为一些模拟。
映射、过滤、减少:您可以将相同的方法应用于参数列表,对其进行映射、过滤或减少。
通常用于提供回调,或者将接口与实现分离。查找以下内容:
-
1.依赖注入,
2.回调,
3.匿名函数(又名Lambdas),
4. 粉刺
ETC
看看这本书,它广泛用于使用 C 开发 TDD: https://www.amazon.co.uk/Driven-Development-Embedded-Pragmatic-Programmers/dp/193435662X