2015-01-25 3 views
0

기본적으로 탐색되지 않은 노드 인 선주문 방식으로 트리에서 다음 사용 가능한 노드를 반환해야하는 powershell 함수가 있습니다. 그러나, 내가 찾은 것은 함수가 호출되는 곳으로 코드가 빠져 나오지 않고 대신 함수의 foreach 루프로 돌아가서 다음 분기로 점프한다는 것입니다. 정확히 무엇을하고 있는지 확실하지 않습니다. 잘못된. 다음은 코드입니다.Powershell 함수는 루프를 벗어나지 않습니다.

function Get-nextAvailable { 
    param (
     $tree 
    } 

    $nextNode = $null 
    foreach ($branch in $tree){ 
     if ($branch.traversal -eq $false){ 
      return $branch  
     } 
     else { 
      Get-nextAvailable ($branch.children) 
     } 
    } 

} 

답변

0

가장 최근의 컨트롤 요소에서 벗어났습니다.

다른 하나에서 벗어날 필요가있는 경우 라벨을 사용할 수 있습니다. 자세한 내용은 help about_break을 참조하십시오.

이유 : 왜 break 왜 직접 반환하지 않을까요?

또한 중첩 된 Get-nextAvailable 호출의 반환 값을 사용하고 있지 않습니다.

+0

반환 값은 똑같은 것으로, 변수를 반환하고 전체 함수를 빠져 나가기를 원하지만 트리의 다음 분기로 계속 진행합니다. –

+0

'break'가 가장 안쪽 루프에서 빠져 나옵니다. 'return'은 함수를 종료합니다. 그들은 같은 일을 할 수 없습니다. 즉, 중첩 호출의 반환 값을 무시하므로이 경우에는 트리를 처리 할 때까지 종료 할 수 없으므로 전체 트리를 걸 수 있습니다. 그래서'$ branch.traversal'이'$ true' 일 때 당신은 전체 산책을 마칠 때까지 절대 빠져 나가지 않을 것입니다. –

+0

일찍 퇴장 할 수있는 방법이 있습니까? Get-nextAvailable ($ branch.children) 함수를 종료 한 후 리턴을 추가하겠습니까? –

관련 문제