2009-04-24 2 views
3

Любопытно, что идея этого:

@() -as [bool] 
# False 

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

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

Я бы ожидать либо значение False/True/Правда или Ложь/ложь/ложь, но не Ложная/Ложь/True.

ответ

7

Как указано в Powershell Quick reference¹:

 
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 

Я думаю, что идея позади этого было то, что массив только с одним элементом $false может легко произойти, если вы поставите вывод командлета/функции в массив , Возможно, вы ожидаете большего количества значений, но некоторая ошибка заставила его вернуть $false, но $false дважды в массиве может быть маловероятным в этом случае.

Или, может быть, мы должны ждать Джеффри Snover ответить здесь :-)

¹ C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Documents \ EN-US \ QuadFold.rtf на моей машине

+0

Хорошо с цитатой, но какова идея этого поведения? Можете ли вы привести пример? –

+0

Был прецедентом, которого я до сих пор не встречал. из-за моей головы я не могу привести убедительный пример, извините. Большинство вещей, которые я недавно делал в PS, решали проблемы Project Euler, и это вряд ли является подходящей областью для этого языка :-) Но я подумаю об этом, может быть, я найду убедительный пример. – Joey

+0

Этот citate породил новый вопрос ... «Пустая строка или строка« false », но я вижу, что True пытается« false »-as [bool]. И небольшая опечатка «Массив длины> 0», она должна быть «Массив длины> 1», как я вижу в моем .rtf. – alex2k8

Смежные вопросы