基于这个答案,我尝试创建另一个重用该三元运算符的运算符(别名),并且在执行命令时出现错误:
管道元素中“&”之后的表达式产生了一个无效的对象。它必须产生一个命令名称、一个脚本块或一个 CommandInfo 对象。
当返回来自三元运算符的值时,会在行上引发错误。我几乎坚持下去,我不明白为什么会发生这种情况。
编码:
Function Invoke-Ternary {
[CmdletBinding()]
Param(
[scriptblock]$Condition,
[scriptblock]$TrueBlock,
[scriptblock]$FalseBlock
)
Process {
if (&$Condition) {
return &$TrueBlock
}
return &$FalseBlock
}
}
Function Get-ValueOrDefault {
[CmdletBinding()]
Param(
[scriptblock]$Value,
[scriptblock]$DefaultValue
)
Process {
Invoke-Ternary $Value $Value $DefaultValue
}
}
Set-Alias ?: Invoke-Ternary -Description "PS ternary operator workaround"
Set-Alias ?? Invoke-Ternary -Description "PS default value operator workaround"
用法:
这工作正常:
?: { $non_existing_variable } { $non_existing_variable } {'default'}
这会引发上述错误:
?? { $non_existing_variable } { 'default' }