3

このばかげた例を考えてください:

if (1..3) { "true" }

上記は、出力trueを生成します。

私の質問: if ステートメントは、条件によって複数の値が出力されるこのようなケースをどのように処理しますか? 「true」出力は「3」(最後のケース) の結果ですか? それとも、他のロジックが働いているのでしょうか? ありがとう。

4

3 に答える 3

4

観察された動作は、このブログ投稿で (ある程度) 説明されています。基本的に、式が 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
于 2013-06-13T11:03:29.253 に答える
2

上記は、予想どおり、出力 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
于 2013-06-13T10:21:25.127 に答える