接受高级函数中的 where 子句



是否可以将where子句传递给高级函数?一个例子来使其更清楚;

$Fruits = @(
@{
Name  = 'Kiwi'
Color = 'Green'
}
@{
Name  = 'Banana'
Color = 'Yellow'
}
)
Function Get-Stuff {
Param (
[scriptblock]$Filter,
[hashtable[]]$Collection
)
$Collection.Where( { $Filter })
}
Get-Stuff -Filter { $_.Name -eq 'Kiwi' } -Collection $Fruits

在这种情况下,如果函数可以返回与$Fruits.Where( { $_.Name -eq 'Kiwi' })相同的内容,那就太好了。

正如 ansgar-wiechers 在上面的评论中所述,您必须删除外部脚本块文字 ({}(:

$Fruits = @(
@{
Name  = 'Kiwi'
Color = 'Green'
}
@{
Name  = 'Banana'
Color = 'Yellow'
}
)
Function Get-Stuff {
Param (
[scriptblock]$Filter,
[hashtable[]]$Collection
)
# Subexpression removed.
$Collection.Where($Filter)
}
Get-Stuff -Filter { $_.Name -eq 'Kiwi' } -Collection $Fruits

最新更新