当您在过滤器中时,有什么方法可以结束管道操作?
一个很好的用途是获取列表的前 n 个元素,类似于 SQL 的 TOP 语句。如果我们编写一个过滤器,称之为“Top”,我们可以像这样检索前 3 个元素:
dir | Top 3
一旦我们返回了前三个,我们就不需要再处理任何元素,实际上我们希望能够告诉管道
请不要再给我任何元素
我知道 Select-Object 有 -First 参数,但这不是我要问的问题。
我已经回答了Powershell 等效于 F# Seq.forall的问题,但我宁愿将其实现为结束管道输入的过滤器。如果有一个名为“end-pipeline”的操作,我会将 ForAll 实现为:
filter ForAll([scriptblock] $predicate) {
process {
if ( @($_ | Where-Object $predicate).Length -eq 0 ) {
$false;
end-pipeline;
}
}
end {
$true;
}
}