此函数接受两个值和一个函数,并使用两个值调用该函数:
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/