Зубчатый массив PowerShell теряет размер, когда только один элемент существует

Это походит на лучший выбор мне:

val1, val2, ignored1, ignored2 = some_function()

Это не загадочно или ужасно (как func () [индекс] метод) и ясно формулирует Вашу цель.

8
задан Eric Schoonover 7 September 2009 в 20:28
поделиться

2 ответа

Я протестировал это на PowerShell V2 CTP в Windows XP и увидел те же результаты, что и OP.

Проблема, по всей видимости, заключается в привычке PowerShell «сглаживать» коллекции, когда они передаются по конвейеру. Простое решение - заключить возвращаемое значение в коллекцию, поставив перед возвращаемым выражением оператор запятой, например:

return ,$factorPairs

См. Запись в блоге Кейта Хилла Эффективный элемент PowerShell 8: Мощность вывода - скаляры, коллекции и пустые множества - О боже! за подробностями.

Надеюсь, это поможет.

12
ответ дан 5 December 2019 в 10:04
поделиться

Вы близко. Проблема, с которой вы столкнулись, заключается в том, что PowerShell разворачивает (выравнивает) массив, когда он возвращается из функции. Используйте оператор запятой, чтобы вернуть массив как есть, не разворачивая его:

return ,$factorPairs

Когда в массиве есть только один элемент, что имеет место для входов 1,2,3 и других простых чисел, PowerShell разворачивает содержимое массива в вывод, чтобы каждый элемент (1,1) появлялся на выходе. Почему PowerShell разворачивает и внешний, и внутренний массив в этом случае - я точно не знаю. Я подозреваю, что они поступают так потому, что есть сценарии, в которых люди ожидают такого поведения от PowerShell.

5
ответ дан 5 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: