programing

함수에 매개 변수가 있는지 확인합니다.

linuxpc 2023. 8. 19. 09:54
반응형

함수에 매개 변수가 있는지 확인합니다.

다음과 같은 기능이 있습니다.

function T
{
    Param
    (
        [switch] $IsValueNameRegularExpression
    )

    ..
}

일반적으로 매개 변수가 있는지 확인하기 위해 수행할 작업if ($Param)이것으로 보아[switch]함수를 다음과 같이 부르는 경우T -IsValueNameRegularExpression:$false에 대해 거짓으로 반환됩니다.if ($IsValueNameRegularExpression)매개 변수가 존재하더라도 즉, 호출자가 선택적 매개 변수에 값을 지정했습니다.

매개 변수 유형을 변경하는 경우[switch]로.[bool]분명히 같은 일이 일어날 것입니다.

제 기능을 위한 코드에서 저는 몇 가지를 부릅니다.내 기본 설정을 포함하는 NET 메서드[bool]"[switch]" 매개 변수이므로 사용자가 값을 지정하지 않은 경우(참이든 거짓이든) 에 전달하고 싶지 않습니다.NET 방식.

의 기본값과 일치하도록 매개 변수에 기본값을 할당할 수 있습니다.NET 방법이지만, 이는 의 기본값을 가정한 것입니다.NET 메서드는 변경되지 않습니다. 사실이 아닐 수도 있습니다.

그렇다면, 이것을 하는 더 우아한 방법이 있을까요?

사용하다$PSBoundParameters.ContainsKey()매개 변수의 존재를 확인하려면:

function T
{
    Param
    (
        [switch] $IsValueNameRegularExpression
    )

    $PSBoundParameters.ContainsKey('IsValueNameRegularExpression')
}

T
T -IsValueNameRegularExpression
T -IsValueNameRegularExpression:$false

출력:

False
True
True

보다 쉽고 정확한 방법은 IsPresent 속성을 사용하는 것입니다.거의 동일한 코드 사용:

function T {
    Param (
        [switch] $IsValueNameRegularExpression
    )
    $IsValueNameRegularExpression.IsPresent
}

T
T -IsValueNameRegularExpression
T -IsValueNameRegularExpression:$false

다음 출력을 생성합니다.

False
True
False

스위치를 false로 바인딩하면 "존재하지 않음"이 됩니다.

function T 
{
    Param([switch]$IsValueNameRegularExpression)

    $IsValueNameRegularExpression.ToBool()
}

결과.

T
False

T -IsValueNameRegularExpression
True

T -IsValueNameRegularExpression:$true
True

T -IsValueNameRegularExpression:$false
False

언급URL : https://stackoverflow.com/questions/25326732/check-for-existence-of-parameter-in-function

반응형