2009-04-24 16 views
3

Neugierig, was ist die Idee dahinter:

@() -as [bool] 
# False 

@($null) -as [bool] 
# False 

@($null, $null) -as [bool] 
# True 

Ich würde erwarten, entweder Falsch/True/Wahr oder Falsch/Falsch/Falsch, aber nicht falsch/Falsch/Wahr.

Antwort

7

Wie in der Powershell Schnell reference¹ skizziert:

 
True             False 
~~~~             ~~~~~ 
$TRUE            $FALSE 
Any string of length > 0, except the word “false” Empty string or the string “false” 
Any number ≠ 0          Any number = 0 
Array of length > 1         Array of length 0 
Array of length 1 whose element is true    Array of length 1 whose element is false 
A reference to any object       Null 

Ich denke, die Idee dahinter, dass ein Array $false mit nur einem Element war leicht, wenn Sie die Ausgabe eines Cmdlets/Funktion in ein Array setzen passieren kann . Sie könnten mehr Werte erwarten, aber ein Fehler führte dazu, dass es $false zurückgibt, aber $false zweimal im Array könnte in diesem Fall unwahrscheinlich sein.

Oder vielleicht sollten wir warten auf Jeffrey Snover hier zu beantworten :-)

¹ C: \ Windows \ System32 \ Windows \ v1.0 \ Dokumente \ en-US \ QuadFold.rtf auf meinem Rechner

+0

Alles klar mit dem Zitat, aber was ist die Idee hinter diesem Verhalten? Kannst du ein Beispiel geben ? –

+0

War ein Anwendungsfall, auf den ich bisher nicht gestoßen bin. von meinem Kopf kann ich kein überzeugendes Beispiel geben, tut mir leid. Die meisten Dinge, die ich kürzlich in PS getan habe, waren das Lösen von Project Euler-Problemen und das ist kaum der richtige Bereich für diese Sprache :-) Aber ich werde darüber nachdenken, vielleicht werde ich ein überzeugendes Beispiel finden. – Joey

+0

Dieses Zitat brachte eine neue Frage hervor ... "Leere Zeichenfolge oder die Zeichenfolge" false "", aber ich sehe True versucht "falsch" -als [bool]. Und ein kleiner Tippfehler "Array der Länge> 0", sollte es "Array der Länge> 1" sein, wie ich in meiner .rtf sehe. – alex2k8