35

スクリプトには、 SVN外部定義を分解する必要のあるいくつかの関数があります。これらは、、、またはのいずれかであり、<url> <path>データを抽出するために私が思いついたメカニズムは2行以上であるため、これを別の関数に入れたいと思います。-r<rev> <url> <path>-r <rev> <url> <path>

しかし、そうすると、関数にローカルな関連データを含む3つの変数になり、3つすべてを呼び出し元に渡す方法がわかりません。

適切なプログラミング言語では、3つの値すべてを含む複合型を返しますが、Powershellでそれを行う方法がわかりません。もちろん、これを3つの別々の機能に分割することもできますが、その後、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)"

3番目に参照による引数の使用

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 に答える