有几种语言可以提供默认或逻辑或分配机制:
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 }
有没有更好的选择[编辑:]不牺牲可读性?
有几种语言可以提供默认或逻辑或分配机制:
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 }
有没有更好的选择[编辑:]不牺牲可读性?
没有 ||
PowerShell任务中的短路运算符,没有任何与Perl相同的东西 //
“定义 - 或”运算符 - 但你可以构造一个简单的 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
或者,如果你想要返回任何已经评估过的东西 $true
就像你的第一个例子:
$a = ?? $b $c -Truthy
所以减少这个的简单方法:
$a = if ($b -ne $null) { $b } else { $c }
将使用true和false只是一个或零的事实,可以像这样使用数组索引:
$a = @($c, $b)[$b -ne $null]