Powershell 'x or y' 赋值
Powershell 'x or y' assignment
有几种语言提供默认或逻辑或赋值机制:
a = b || c;
a = b or c
a="${b:-$c}"
a = b ? b : c;
到目前为止,我在 Powershell Core 中发现的唯一等效项是非常冗长:
$a = if ($b) { $b } else { $c }
在某些情况下必须变成
$a = if ($b -ne $null) { $b } else { $c }
是否有更好的选择 [edit:] 且不牺牲可读性?
PowerShell 赋值中没有 ||
短路运算符,也没有与 Perl 的 //
"defined-or" 运算符等效的东西 - 但您可以构造一个简单的 null coalesce 模仿,例如所以:
function ?? {
param(
[Parameter(Mandatory=$true,ValueFromRemainingArguments=$true,Position=0)]
[psobject[]]$InputObject,
[switch]$Truthy
)
foreach($object in $InputObject){
if($Truthy -and $object){
return $object
}
elseif($object -ne $null){
return $object
}
}
}
然后像这样使用:
$a = ?? $b $c
或者,如果你只想 return 任何可以计算为 $true
的东西,就像你的第一个例子:
$a = ?? $b $c -Truthy
减少这种情况的简单方法:
$a = if ($b -ne $null) { $b } else { $c }
将使用 true 和 false 只是 1 或 0 的事实,并且可以像这样用作数组索引:
$a = @($c, $b)[$b -ne $null]
有几种语言提供默认或逻辑或赋值机制:
a = b || c;
a = b or c
a="${b:-$c}"
a = b ? b : c;
到目前为止,我在 Powershell Core 中发现的唯一等效项是非常冗长:
$a = if ($b) { $b } else { $c }
在某些情况下必须变成
$a = if ($b -ne $null) { $b } else { $c }
是否有更好的选择 [edit:] 且不牺牲可读性?
PowerShell 赋值中没有 ||
短路运算符,也没有与 Perl 的 //
"defined-or" 运算符等效的东西 - 但您可以构造一个简单的 null coalesce 模仿,例如所以:
function ?? {
param(
[Parameter(Mandatory=$true,ValueFromRemainingArguments=$true,Position=0)]
[psobject[]]$InputObject,
[switch]$Truthy
)
foreach($object in $InputObject){
if($Truthy -and $object){
return $object
}
elseif($object -ne $null){
return $object
}
}
}
然后像这样使用:
$a = ?? $b $c
或者,如果你只想 return 任何可以计算为 $true
的东西,就像你的第一个例子:
$a = ?? $b $c -Truthy
减少这种情况的简单方法:
$a = if ($b -ne $null) { $b } else { $c }
将使用 true 和 false 只是 1 或 0 的事实,并且可以像这样用作数组索引:
$a = @($c, $b)[$b -ne $null]