35

在脚本中,我有几个函数需要分解SVN 外部定义。这些可以是<url> <path>-r<rev> <url> <path>-r <rev> <url> <path>,而且我想出的提取数据的机制不仅仅是两行,所以我想把它放到一个单独的函数中。

但是当我这样做时,我最终得到了三个包含函数本地相关数据的变量,而且我看不出有办法将这三个变量都传递给调用者。

在适当的编程语言中,我会返回一个包含所有三个值的复合类型,但我不知道如何在 Powershell 中做到这一点。当然,我可以将其拆分为三个单独的函数,但随后我又违反了DRY 规则

那么我可以在 Powershell 中做什么呢?

4

3 回答 3

96

我同意@Christian,我添加了另一个解决方案。

首先,您可以使用数组显式或隐式返回:

A) 明确

function ExplicitArray ()
{
  $myArray = @()

  $myArray += 12
  $myArray += "Blue"

  return ,$myArray
}

Clear-Host
$a = ExplicitArray
Write-Host "values from ExplicitArray are $($a[0]) and $($a[1])"

B) 隐含的

function ImplicitArray ()
{
  Write-Output 12

  Write-Output "Blue"
  return "green"
}

$b = ImplicitArray
Write-Host "values from ImplicitArray are $($b[0]), $($b[1]) and $($b[2])"

其次,您可以返回一个自定义对象:

A) 简短形式

function ReturnObject ()
{
  $value = "" | Select-Object -Property number,color
  $value.Number = 12
  $value.color = "blue"
  return $value
}
$c = ReturnObject
Write-Host "values from ReturnObject are $($c.number) and $($c.color)"

B) 学校形式

function SchoolReturnObject ()
{
  $value = New-Object PsObject -Property @{color="blue" ; number="12"}
  Add-Member -InputObject $value –MemberType NoteProperty –Name "Verb" –value "eat"
  return $value
}
$d = SchoolReturnObject
Write-Host "values from SchoolReturnObject are $($d.number), $($d.color) and $($d.Verb)"

第三次通过引用使用参数

function addition ([int]$x, [int]$y, [ref]$R)
{
 $Res = $x + $y
 $R.value = $Res
}

$O1 = 1
$O2 = 2
$O3 = 0
addition $O1 $O2 ([ref]$O3)
Write-Host "values from addition $o1 and $o2 is $o3"
于 2012-09-27T12:23:36.580 回答
34

也许我误解了这个问题,但这并不像返回变量列表一样简单,调用者只需将每个变量分配给一个变量。那是

> function test () {return @('a','c'),'b'}
> $a,$b = test

$a 是一个数组,$b 是字母 'b'

> $a 
a
c
> $b
b
于 2015-07-03T10:58:39.577 回答
4

您可以返回一个数组,[string]然后让调用者拆分它或返回一个自定义对象,并且始终由调用者进行拆分。

于 2012-09-27T11:49:44.587 回答