Dan*_*tle 2 powershell powershell-2.0
使用该ForEach-Object功能时,有没有办法提供function而不是code block.
这将使我能够简化:
@(1, 2, 3, 4) | % { Add-One $_ }
Run Code Online (Sandbox Code Playgroud)
对此,或类似:
@(1, 2, 3, 4) | % Add-One
Run Code Online (Sandbox Code Playgroud)
为了完整性,这里是Add-One函数的当前定义
function Add-One($Number) {
return $Number + 1
}
Run Code Online (Sandbox Code Playgroud)
编写一个函数process来做类似的事情很容易,如下所示:
@(1, 2, 3, 4) | Add-One
Run Code Online (Sandbox Code Playgroud)
但是,这意味着您必须重新实现循环和ValueFromPipeline每个函数,而不是重用ForEach-Object已提供的函数.所以简而言之,有一种方法可以使用标量函数ForEach-Object,避免将其包装在Code Block?
Kei*_*ill 10
当然,你可以像这样使用一个脚本块:
PS> $sb = { process { $_ + 1 }}
PS> 1..4 | % $sb
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
但也许更直接的方法是创建一个过滤器:
filter Add-One { $_ + 1 }
1..4 | Add-One
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下功能:
function Add-One {process {$_ + 1}}
1..4 | Add-One
Run Code Online (Sandbox Code Playgroud)
过滤器基本上是一个带有隐含过程块的函数.高级函数方法如下所示:
function Add-One {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline)]
[int[]]
$Number
)
process {
foreach ($n in $Number) {$n + 1}
}
}
1..4 | Add-One
Add-One (1..4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |