组合多个函数,将一个或多个函数作为参数传递给另一个函数的想法,通常被称为使用高阶函数,这是我非常满意的一种模式,因为我大约十年前就读到了这本书的启发尼尔·福特(Near Ford)着的《功能性思维:语法范式》。本书的主要思想是,无论是否支持一等公民,您都可以采用任何语言的功能性思维定式编程。那本书中的示例主要是用Java(版本5到6)编写的,该语言仅从版本8开始就支持(类似)作为一等公民的功能。正如我说的,更多的是心态比什么都重要。
所以:几天前,在一个操作系统课程的实验中,等待学生编写的解决方案,我想知道是否有可能采用一种功能方法来构成功能(或类似的东西)。外壳脚本。
(更详细地讲:引发我对此主题的思考的问题是"如何重用(不是太多)复杂的代码段,涉及在两个不同的用例中搜索文件并对其进行迭代,这仅在操作上有所不同应用于每个文件)
我的回答是可能是!,所以我尝试编写一些代码并最终得到了上面的解决方案。
重点是-恕我直言-在支持头等公民功能的语言中,要放在一起的砖块是函数,在(bash)脚本中,最小的砖块是命令:通常来说,命令可以是二进制的,也可以是脚本-但是(bash)脚本中定义的功能也可以用作命令。做出这种精神上的转换后,找到一个(简单的)解决方案并不是特别困难:
foreach.sh-与.Net标准库的ListT.ForEach(Action T)扩展方法类似的东西(它实际上是一个高阶程序)
main.sh-主程序,在更多情况下重用foreach逻辑,将不同的动作传递给高阶程序
按照这种方法,您可以对一堆文件应用不同的操作,而不必复制找到它们的代码...,您可以在bash脚本中应用功能思维! 以同样的方式,您可以使用bash脚本中的函数来实现类似于经典map高阶函数的功能: 总之,不管您使用哪种语言:功能性地使用它,将积木和高阶积木组合在一起,这只是心态!