powershell - 简洁地传递函数作为参数

标签 powershell higher-order-functions

此函数接受两个值和一个函数,并使用两个值调用该函数:

function abc ($a, $func, $b) { &$func $a $b }

定义要传递的函数:
function bcd ($x, $y) { $x + $y }

bcd传递给abc:
abc 10 bcd 20

结果是30

似乎没有传递bcd函数对象本身,而是传递了字符串“bcd”。然后abc通过名称调用bcd

这是将功能传递给另一个功能的可接受方法吗?我见过的大多数示例都建议在脚本块中传递一个函数,该脚本块将在接收函数中调用。但是,该方法比上述方法更为冗长。

最佳答案

您是正确的,只要作用域的变化范围不足以使命名无效即可。因此,对于真正的通用代码而言,它有点脆弱。例如,即使在您的个人资料脚本中,我也不推荐这样做。 (从一些痛苦的经验中得知,这里的概要文件功能不足。)

但是,请考虑以下示例,该示例更短,更可靠:

function abc($a, $func, $b) { &$func $a $b }
abc 10 { param($a, $b); $a+$b } 20

(打印出30。)您可以使用param块执行通常需要执行的任何操作,包括验证。
abc 10 {param([parameter(Mandatory=$true)]$a, [parameter(Mandatory=$true)]$b); $a+$b} 20

另外,可以这样预定义函数:
$bcd = { param($a, $b); $a+$b }

并照常继续:
abc 10 $bcd 20

关于powershell - 简洁地传递函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27935711/

相关文章:

ocaml - 了解 Fold_right 的机制

javascript - 在高阶函数中访问数组对象

powershell - 如何使用PowerShell从字符串读取特定变量?

powershell - 在任务计划程序上运行PowerShell脚本

json - 从JSON提取值

javascript - 将变量传递给高阶函数

regex - 正则表达式提取单词

powershell - 如何将输出输出到变量

r - 使用 purrr::reduce2 复制嵌套 gsub 调用的行为

javascript - 使用 boolean 值作为参数的高阶函数