为什么函数作用域和方法作用域中的变量不同?

时间:2018-10-11 11:42:57

标签: powershell powershell-v5.0 powershell-v5.1

我用来记录具有exception的函数名。代码如下

function sample {
    try{
        $functionname = "sample"
        throw "Error"
    }
    catch{
        write-error "[$functionName] :Exception occured "
        $_
    }
}

sample

现在,我在类方法中尝试遵循的相同方法。但是在try块中声明的变量在catch块中不可见。

class sample{

[string] samplemethod() {

    try{
        $MethodName = "SampleMethod"

        throw "error"

    }
    catch{
        Write-error "[$MethodName] : Exception occured"

        $_
    }
    return "err"
}

}

$obj = [sample]::new()
$obj.samplemethod()

它引发如下异常

  

在线:12字符:23   +写错误“ [[$ MethodName]:发生异常”   + ~~~~~~~~~~~~方法中未分配变量。

作用域规则在类方法和函数之间是否发生了变化?

1 个答案:

答案 0 :(得分:-1)

除类和方法外,try catch块中还存在其他范围.try块中声明的变量无法从catch块访问。以下代码应无任何异常地执行。
    课程样本{

[string] samplemethod() {
    $MethodName = "SampleMethod1"

    try{
        $test='hello'

        throw "error"

    }
    catch{
        Write-Host $MethodName
        Write-error "[$MethodName] : Exception occured"

        $_
    }
    return "err"
}

}

$obj = [sample]::new()
$obj.samplemethod()