2017-05-18 28 views
0

我有這個代碼返回有關TFS WorkItems的信息。我刪除了TFS特定的東西來減少噪音。在一天結束時,它是一個遞歸函數,它始於一個根,然後沿着一棵樹走,直到它找到孩子。我想添加一些邏輯來根據級別以不同的格式輸出。可能會在每行添加一個製表符,或者以其他方式直觀地標識每個級別,有沒有類似if ($$some_variable -eq 1) {write-host "welcome to level 1"}
這裏是PowerShell代碼:Powershell遞歸函數 - 如何判斷我在哪個級別?

$wi_id = 123 
[email protected]() 

function get_linkedWIs { 
param($wi_id) 
$WIT.GetWorkItem($wi_id) |%{ $_.WorkItemLinks} |?{$_.LinkTypeEnd.Name -eq "Child" } | %{$result +=$WIT.GetWorkItem($_.targetid)} 

$result.GetEnumerator() | Sort -Property id -Unique 
} 

function get_children { 
param($wi_id) 
$rs = get_linkedWIs $wi_id 
$rs | %{ 
Write-Host "this is a num - "$script:num 

write-host $_.Type.Name" "$_.id" "$_.Title 
$has_children = 0 
$_.WorkItemLinks | %{if ($_.LinkTypeEnd.Name -eq "Child" -or $has_children -eq 1) {$has_children =1} } 
if ($has_children -eq 1) 
{ 
$script:num +=1 
get_children $_.id 
} 
} 

} 


get_children $wi_id 

回答

1

當然......通過一個level變量參數列表。主程序調用值爲1.當函數再次出現時,調用值爲$level+1。這樣,每個實例都有一個保存通話級別的局部變量。

你也可以用一個全局變量來做這件事,在入口處加入1,在出口處加1,但這並不安全。

+0

如果每個節點只有一個孩子,那麼這種方式可以正常工作,但顯然並非如此。因此,讓我們來看一個1級的「功能」,然後是2級的「用戶故事」。根據您的建議,每次爲「用戶故事」調用此功能時,級別指示器都會增加,但它不應該。只有當「用戶故事」子工作項目被處理時,級別應該增加到3.有意義嗎? – Mordechai

+0

在我的第一個建議中,「feature」節點用'$ level + 1'調用它的每個子節點;不要增加本地值,只需再給孩子一個。每個「用戶故事」的孩子都會得到*相同*遞增的值。您的描述似乎暗示「升級」和「孩子」並不等同。請發佈你的樹結構的描述。 – Prune

+0

謝謝,不,他們是等效的。我只是在循環內添加了$ level + 1來進行遞歸調用。我感覺這很簡單。 – Mordechai

相關問題