如何回退到子程式內的默認值?考慮1.ps1如下:
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[ValidateSet('A', 'B')]
[String]
$What,
$Target
)
function CallA {
param(
$Target = 'default for A'
)
Write-Host $Target
}
function CallB {
param(
$Target = 'default for B'
)
Write-Host $Target
}
&"Call$What" -Target $Target
如果我像這樣從 powershell 控制臺呼叫它:./1 -What A我會得到空行,而目的是得到default for A結果。
我當然可以檢查是否$Target是$null在每一個功能,但我覺得這樣是很麻煩。除了顯式檢查之外,還有更好的方法嗎?
uj5u.com熱心網友回復:
使用splatting - 有條件地將-Target引數值添加到字典中,并使用@splat 運算子將其傳遞給內部函式呼叫:
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[ValidateSet('A', 'B')]
[String]
$What,
$Target
)
function CallA {
param(
$Target = 'default for A'
)
Write-Host $Target
}
function CallB {
param(
$Target = 'default for B'
)
Write-Host $Target
}
# Create a dictionary to hold the parameter arguments we want to "splat"
$callParams = @{}
# Conditionally add parameter arguments to the dictionary
if($PSBoundParameters.ContainsKey('Target')){
# -Target argument was passed, pass it on to in inner function call
$callParams['Target'] = $Target
}
# Call function with splatted arguments
&"Call$What" @callParams
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/399966.html
標籤:电源外壳
