2017-01-04 2 views
0

PowerShell 5.0 클래스를 사용한 실험에서 Rosetta Code의 Stable Marriage 문제에 대한 JavaScript 코드를 변환하려고했습니다. 그것은 매우 직설적으로 보였지만 두 번째 방법 (순위)은 오류를 반환합니다. 모든 코드 경로가 메서드 내에서 값을 반환하지는 않습니다. $this.Candidates.Count0 경우에는 반환이 실행되지 않기 때문에PowerShell 5.0 클래스 메서드 반환 "메서드 내에서 모든 코드 경로가 값을 반환하지는 않습니다"

class Person 
{ 
    # --------------------------------------------------------------- Properties 
    hidden [int]$CandidateIndex = 0 
    [string]$Name 
    [person]$Fiance = $null 
    [person[]]$Candidates = @() 

    # ------------------------------------------------------------- Constructors 
    Person ([string]$Name) 
    { 
     $this.Name = $Name  
    } 

    # ------------------------------------------------------------------ Methods 
    static [void] AddCandidates ([person[]]$Candidates) 
    { 
     [Person]::Candidates = $Candidates 
    } 

    [int] Rank ([person]$Person) 
    { 
     for ($i = 0; $i -lt $this.Candidates.Count; $i++) 
     { 
      if ($this.Candidates[$i] -eq $Person) 
      { 
       return $i 
      } 

      return $this.Candidates.Count + 1 
     } 
    } 

    [bool] Prefers ([person]$Person) 
    { 
     return $this.Rank($Person) -lt $this.Rank($this.Fiance) 
    } 

    [person] NextCandidate() 
    { 
     if ($this.CandidateIndex -ge $this.Candidates.Count) 
     { 
      return $null 
     } 

     return $this.Candidates[$this.CandidateIndex++] 
    } 

    [int] EngageTo ([person]$Person) 
    { 
     if ($Person.Fiance) 
     { 
      $Person.Fiance.Fiance = $null 
     } 

     return $this.Fiance = $Person 
    } 

    [void] SwapWith ([person]$Person) 
    { 
     Write-Host ("{0} and {1} swap partners" -f $this.Name, $Person.Name) 
     $thisFiance = $this.Fiance 
     $personFiance = $Person.Fiance 
     $this.EngageTo($personFiance) 
     $Person.EngageTo($thisFiance) 
    } 
} 

답변

1

오류입니다.

두 번째 리턴이 for 루프 외부에 있어야합니까?

현재 후보가 첫 번째 후보와 일치하지 않으면 $this.Candidates.Count + 1을 반환합니다.

[int] Rank ([person]$Person) 
{ 
    for ($i = 0; $i -lt $this.Candidates.Count; $i++) 
    { 
     if ($this.Candidates[$i] -eq $Person) 
     { 
      return $i 
     } 
    } 
    return $this.Candidates.Count + 1 
} 
+0

매우 간단한 답장을 보내 주셔서 감사 드리며 "간단한"직접 번역을하지 않도록 상기시켜 주셨습니다. 나는 나의 실수를 인정하고 그것을 반복하지 않을 것이다. –