2012-09-27 31 views
10

在腳本中有需要打破了SVN external definition多種功能。這些可以是<url> <path>-r<rev> <url> <path>,或-r <rev> <url> <path>和機制,我想出了提取數據,不僅僅是兩行以上,所以我想把這變成一個單獨的函數。我如何從一個PowerShell函數返回的幾個項目

但是,當我這樣做,我結束了含有局部於函數的相關數據三個變量,我看沒辦法他們三個人他們都會得到給調用者。

在一個適當的編程語言,我會返回一個包含所有三個值的複合型,但我不明白怎麼做,在PowerShell中。當然,我可以把它分成三個獨立的功能,但是我回到了違反DRY rule

所以我能在這裏做PowerShell的?

回答

6

您可以返回一個[string]的數組,然後讓調用者拆分它或返回custom object並始終調用者進行拆分。

+0

哦,該自定義對象的東西看起來很像我所需要的! – sbi

48

我同意@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 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" 
+2

啊,你可以通過引用傳遞參數!我不知道。謝謝! – sbi

+0

注意,在上面的例子中沒有必要使用'return'語句。 PowerShell中的'return'通常只用於改變函數的正常退出點。 –

+3

這是你的觀點,我尊重它。我的觀點是'return $ value'使函數代碼更具可讀性,而且在我的代碼中,我絕對不會在函數中使用Write-Output。我存在關於結構化程序設計的舊規則,我嘗試應用 – JPBlanc

5

也許我誤解的問題,但不是這只是

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 test() {return @('a','c'),'b'} 
> $a,$b = test 

$ a將會是一個數組,和$ b在字母 'b'

> $a 
a 
c 
> $b 
b 
相關問題