基于这个答案,我试图创建另一个重用该三元运算符的运算符(别名(,但在执行命令时出现错误:
管道元素中"&"后面的表达式生成了无效的对象。它必须产生命令名称、脚本块或 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' }
我最近改进了(打开 PullRequest(PoweShell 库"Pscx">
中的三元条件和空合并运算符请看看我的解决方案。
我的 github 主题分支:UtilityModule_Invoke运算符
功能:
Invoke-Ternary
Invoke-TernaryAsPipe
Invoke-NullCoalescing
NullCoalescingAsPipe
别名
Set-Alias :?: PscxInvoke-Ternary -Description "PSCX alias"
Set-Alias ?: PscxInvoke-TernaryAsPipe -Description "PSCX alias"
Set-Alias :?? PscxInvoke-NullCoalescing -Description "PSCX alias"
Set-Alias ?? PscxInvoke-NullCoalescingAsPipe -Description "PSCX alias"
用法
<condition_expression> |?: <true_expression> <false_expression>
<variable_expression> |?? <alternate_expression>
作为表达式,您可以传递:
$null,文字,变量,"外部"表达式($b -eq 4(或脚本块{$b -eq 4}
如果变量表达式中的变量$null或不存在,则备用表达式将作为输出进行计算。