大约有路过的功能通Cmdlet的作为参数传递给函数
function pass_function([scriptblock] $func, [int] $a){
func.invoke($a)
}
你将如何通过接受管道输入的cmdlet几个很好的答案?我有一个贫穷的解决方案
function pass_through([scriptblock]$command){
$command.invoke()
}
1,2,3,4 | pass_through { $input | Where { $_ -gt 1} }
输出2,3,4
技术上有足够的工具在那里,但他们需要实现摆弄。我宁愿传递Where和{$ _ -gt 1}作为单独的参数。
如果没有很好的支持,这种语言的解决类似问题的风格是什么?
能不能细说你为什么做这种方式?元编程很有趣,但我很好奇。为什么你不能制作一个专用的函数来接受你想要的参数......处理并继续处理管道。 – Matt
为简单起见,我们选择了这个例子。但是假设我有一个“日志记录”工具,用于测试CmdLet对管道输入的影响。因此,我们可能有 “input | remember | chosenCmdLet | difference” 其中“remember”可能以某种方式标记值,并且当流中的元素被删除或更改时,“差异”会发出信号。如果我可以调用Test chosenCmdLet而不是在这两个Cmdlet之间调用它,那将会很好。 – Polymer
@Polymer函数测试{param([ScriptBlock] $ Command)输入|记住| Invoke-Command $ Command | difference}''Test {Where {$ _ -gt 1}}' – PetSerAl