尝试让高阶函数在powershell中工作

问题描述 投票:0回答:2

我无法让这个例子工作

{ $_ + $_ }, { $_ + 1}, {$_ - 1} | % { $_ 1 }

我希望它构造一个列表/数组/集合/任何函数(这部分很好),然后将该列表通过管道传输到右侧的代码块,该代码块将每个函数应用于参数 1 并返回一个数组与结果(即;2,2,0)。我尝试过使用 getnewclosure() 方法和 & 运算符,到目前为止没有任何效果。

powershell functional-programming closures higher-order-functions
2个回答
8
投票

美元下线变量是一个自动变量,仅在某些情况下填充;在这种情况下,当有来自管道的传入对象时。为了给

$_
赋予值 1(这似乎是您的意图),您必须将数字通过管道传递给每个值并执行脚本块。最简单的方法是将其作为参数直接传递给接受脚本块的
%
(
foreach-object
):

PS> { $_ + $_ }, { $_ + 1}, {$_ - 1} | % { 1 | % $_ }
2
2
0

看看它,直到它有意义:)如果它没有点击,请在此处评论,我会更详细地解释。

如果您对 powershell 中的功能修补感兴趣,您可能会喜欢我为部分应用程序编写的这个函数:

http://www.nivot.org/blog/post/2010/03/11/PowerShell20PartialApplicationOfFunctionsAndCmdlets

虽然有点笨拙,但还是可以的。


2
投票

我想建议稍微不同的方法:使用另一个自动变量而不是

$_
,以便使用传递的值(1):

{ $args[0] + $args[0] }, { $args[0] + 1 },  { $args[0] - 1 } | % { & $_ 1 }

正如Oisin提到的,

$_
不用于:
& { $_ } 1
场景,它仅在涉及管道时才起作用。

© www.soinside.com 2019 - 2024. All rights reserved.