将函数作为参数传递给其他函数背后的意义是什么?



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

一般来说,在需要对foo2进行多次评估的情况下,您将函数foo2传递给函数foo1- 并且您可能事先不知道每次调用foo2将使用哪些参数,因此您不可能提前自己执行调用。

我认为列表中的sort()函数/方法可能是最好的具体例子。 考虑一个人员列表 - 您可能合理地希望按姓名的字母顺序、年龄的数字顺序、与给定点的地理距离或许多其他可能的顺序对他们进行排序。 将每个这样的排序都作为内置选项包含在sort()中是不切实际的:语言通常采用的方法是允许调用者提供一个函数作为参数,该函数定义了列表项之间的顺序。

原因有很多:

依赖注入:如果您传递了一个在生产中将使用数据库调用的方法,并且您将其与不同的参数一起使用,则可以在单元测试时用一些模拟替换它。

映射、过滤、减少:您可以将相同的方法应用于参数列表,以映射、过滤或减少它。

通常用于提供回调,或将接口与实现分开。 查找以下内容:

    1. 依赖注入, 2. 回调, 3. 匿名函数(又名 Lambdas), 4. 痘痘 等等

看看这本书,它被广泛用于用C开发TDD: https://www.amazon.co.uk/Driven-Development-Embedded-Pragmatic-Programmers/dp/193435662X

相关内容

  • 没有找到相关文章

最新更新