我有两个PowerShell函数,第一个调用第二个函数.它们都带有N个参数,其中一个被定义为简单地添加一个标志并调用另一个.以下是示例定义:
function inner
{
foreach( $arg in $args )
{
# do some stuff
}
}
function outer
{
inner --flag $args
}
Run Code Online (Sandbox Code Playgroud)
用法看起来像这样:
inner foo bar baz
Run Code Online (Sandbox Code Playgroud)
或这个
outer wibble wobble wubble
Run Code Online (Sandbox Code Playgroud)
目标是后一个例子等同于
inner --flag wibble wobble wubble
Run Code Online (Sandbox Code Playgroud)
问题:inner如此处所定义,后者实际上导致传递两个参数:第一个是"--flag",第二个是包含"wibble","wobble"和"wubble"的数组.我想要的是inner接收四个参数:标志和三个原始参数.
所以我想知道的是如何说服powershell在传递它之前扩展$ args数组inner,将其作为N个元素而不是单个数组传递.我相信你可以使用splatting运算符(*字符)在Ruby中执行此操作,我很确定PowerShell可以做到这一点,但我不记得如何.
小智 11
PowerSHell V1中没有很好的解决方案.在V2中我们添加了splatting(虽然出于各种原因,我们使用@而不是*来实现此目的).这是它的样子:
PS(STA-ISS)(2)> function foo($ x,$ y,$ z){"x:$ xy:$ yz:$ z"}
PS(STA-ISS)(3)> $ a = 1,2,3
PS(STA-ISS)(4)> foo $ a#作为单个arg传递
x:1 2 3 y:z:
PS(STA-ISS)(5)> foo @a #splatted
x:1 y:2 z:3