Почему переменные в области видимости функции и метода отличаются? - PullRequest
0 голосов
/ 11 октября 2018

Я использую для регистрации имя функции, которая имеет исключение.Код такой, как показано ниже

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 голосов
/ 21 ноября 2018

В блоках 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()
...