Любопытно, что идея этого:
@() -as [bool]
# False
@($null) -as [bool]
# False
@($null, $null) -as [bool]
# True
Я бы ожидать либо значение False/True/Правда или Ложь/ложь/ложь, но не Ложная/Ложь/True.
Любопытно, что идея этого:
@() -as [bool]
# False
@($null) -as [bool]
# False
@($null, $null) -as [bool]
# True
Я бы ожидать либо значение False/True/Правда или Ложь/ложь/ложь, но не Ложная/Ложь/True.
Как указано в 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 на моей машине
Хорошо с цитатой, но какова идея этого поведения? Можете ли вы привести пример? –
Был прецедентом, которого я до сих пор не встречал. из-за моей головы я не могу привести убедительный пример, извините. Большинство вещей, которые я недавно делал в PS, решали проблемы Project Euler, и это вряд ли является подходящей областью для этого языка :-) Но я подумаю об этом, может быть, я найду убедительный пример. – Joey
Этот citate породил новый вопрос ... «Пустая строка или строка« false », но я вижу, что True пытается« false »-as [bool]. И небольшая опечатка «Массив длины> 0», она должна быть «Массив длины> 1», как я вижу в моем .rtf. – alex2k8