工作,我不能让这个例子的工作试图让高阶函数在PowerShell中
{ $_ + $_ }, { $_ + 1}, {$_ - 1} | % { $_ 1 }
我希望它构建一个列表/阵列/收藏/任何的功能(这部分是罚款) ,然后将该列表传递给右侧的代码块,该代码块将每个函数应用于参数1,并返回一个包含结果(即2,2,0)的数组。我尝试过使用getnewclosure()方法,&运算符,到目前为止没有任何工作。
工作,我不能让这个例子的工作试图让高阶函数在PowerShell中
{ $_ + $_ }, { $_ + 1}, {$_ - 1} | % { $_ 1 }
我希望它构建一个列表/阵列/收藏/任何的功能(这部分是罚款) ,然后将该列表传递给右侧的代码块,该代码块将每个函数应用于参数1,并返回一个包含结果(即2,2,0)的数组。我尝试过使用getnewclosure()方法,&运算符,到目前为止没有任何工作。
美元下划线变量是自动变量只在某些情况下填充;在这种情况下,当存在来自管道的传入对象时。为了让$_
的值为1,这看起来是您的意图,您必须将数字传递给每个值,并执行脚本块。要做到这一点,最简单的方法是直接把它作为参数传递给%
(foreach-object
),它接受一个脚本块:
PS> { $_ + $_ }, { $_ + 1}, {$_ - 1} | % { 1 | % $_ }
2
2
0
看着它,直到它是有道理的:)如果不点击,评论回到这里我会更详细地解释。
如果你有兴趣在PowerShell中的功能修修补补,你可能会喜欢这个功能,我写了部分应用程序:
http://www.nivot.org/blog/post/2010/03/11/PowerShell20PartialApplicationOfFunctionsAndCmdlets
这是一个有点笨拙,但还是可以的。
我想建议稍微不同的方法:使用代替$_
另一个自动变量,以便使用传递的值(1):& { $_ } 1
情形:
{ $args[0] + $args[0] }, { $args[0] + 1 }, { $args[0] - 1 } | % { & $_ 1 }
如[287]莪提到的,$_
不使用,它只在涉及管道时才起作用。
哦,我认为$ _始终限定在当前块中。这样做实际上有所作为。哈哈不错 – TheIronKnuckle
我考虑过这个,但我认为使用'$ _'确实很贴心。如果你打算去'$ args [0]'路线,那么使用明确的'param($ x)'可能会更清晰。 – x0n