为什么这个方法返回两个值?

时间:2014-06-26 23:38:36

标签: string function powershell

此方法应该包含一个字符串,如果全部为零,则返回true;如果字符串中至少有一个其他字符,则返回false

Function check0ID($fixedString) {

    foreach ($char in $fixedString) {
        If ($char -ne "0") {
            $false
        }
    }

    $true

}

此方法将返回:

false true

即使字符串不是全零。返回$false后,为什么此方法不会停止?注意如果您想提供具有相同功能的更有效方法,请执行以下操作:)

2 个答案:

答案 0 :(得分:4)

这里有两件事:

  1. 您需要明确使用return keyword过早退出函数。有关详细信息,请参阅Function return value in PowerShell

  2. 您需要在$fixedString上调用System.String.ToCharArray方法,以便将其视为一个字符数组。否则,$char将等于循环体内的$fixedString。您可以通过在循环标题下添加以下行来自行查看:

    Write-Host "`$char equals $char"
    
  3. 以下是您脚本的固定版本:

    Function check0ID($fixedString) {
    
        foreach ($char in $fixedString.ToCharArray()) {
            If ($char -ne "0") {
                return $false
            }
        }
    
        $true
    
    }
    

答案 1 :(得分:2)

你这样做太复杂了。您可以简单地进行正则表达式匹配并返回结果,而不是对字符串中的所有字符进行迭代的所有微观管理:

function ContainsNonZero($fixedString) {
  [bool]($fixedString -match '[^0]')
}