PowerShell 三元和默认运算符



基于这个答案,我试图创建另一个重用该三元运算符的运算符(别名(,但在执行命令时出现错误:

管道元素中"&"后面的表达式生成了无效的对象。它必须产生命令名称、脚本块或 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或不存在,则备用表达式将作为输出进行计算。

相关内容

  • 没有找到相关文章

最新更新