このばかげた例を考えてください:
if (1..3) { "true" }
上記は、出力trueを生成します。
私の質問: if ステートメントは、条件によって複数の値が出力されるこのようなケースをどのように処理しますか? 「true」出力は「3」(最後のケース) の結果ですか? それとも、他のロジックが働いているのでしょうか? ありがとう。
このばかげた例を考えてください:
if (1..3) { "true" }
上記は、出力trueを生成します。
私の質問: if ステートメントは、条件によって複数の値が出力されるこのようなケースをどのように処理しますか? 「true」出力は「3」(最後のケース) の結果ですか? それとも、他のロジックが働いているのでしょうか? ありがとう。
観察された動作は、このブログ投稿で (ある程度) 説明されています。基本的に、式が 0 と評価された場合は false と解釈され、それ以外の場合は true と解釈されます。例:
0 => False
1 => True
"0" => True (because it's a string of length 1)
"" => False (because it's a string of length 0)
@() => False
@(0) => False (this one's a little surprising)
@(0,1) => True
@("0") => True
上記は、予想どおり、出力 true を生成します。
「true」を出力すると予想されるのはなぜですか?
条件によって複数の値が出力されるこのような場合、if ステートメントはどのように処理するのでしょうか?
条件は値を「出力」しません。常に「true」または「false」に評価されます。残っている問題は、なぜ true (または false) と評価されるのかということです。
コード
if (1..3) { "true" }
に等しい
if (@(1,2,3)) { "true" }
に等しい
$array = @(1,2,3)
if ($array) { "true" }
として動作します
if ($array.Length -gt 0) { "true" }
したがって、個々の要素がテストされるのではなく、配列に要素が含まれているかどうかがテストされます。
たとえば、次は「true」を出力しません。
if (@()) { "true" }
更新配列に値が1つしか含まれていない場合、配列が内部の1つの要素を使用してスカラー値として扱われているかのように見えます(それに関する規範的なドキュメントは見つかりませんでした)。
そう
if (@(0))
if (@(0.0))
if (@(1))
if (@(-1))
if (,$null))
if (,"false"))
として扱われます
if (0) --> false
if (0.0) --> false
if (1) --> true
if (-1) --> true
if ($null) --> false
if ("false") --> true