Почему канал в% {0} в PowerShell? - PullRequest
0 голосов
/ 24 июня 2018

Сценарии PowerShell иногда передают в% {0}:

[byte[]]$bytes = 0..65535 | %{0};

Я знаю, что% - это псевдоним ForEach-Object, а $ _ представляет текущий объект конвейера.

Это только для того, чтобы избежать вывода? Разве нет более разумного способа сделать это?

1 Ответ

0 голосов
/ 24 июня 2018

Конвейер на правой стороне просто выводит целое число 0 65536 раз - которое при приведении к byte[] создает массив байтов длиной 65536 со всеми значениями, инициализированными к 0.

Вы могли бы также сделать:

[byte[]]$bytes = ,0 * 65536

Поскольку PetSerAl намекает на , в этом нет необходимости, поскольку массивы типов числовых значений в любом случае инициализируют все элементы на 0, что означает простое создание нового массива, например:

# using the new constructor keyword, PowerShell version > 5, 
[byte[]]$bytes = [byte[]]::new(65536)
# using New-Object, PowerShell version > 2
[byte[]]$bytes = New-Object 'byte[]' 65536

также дал бы вам точно такой же результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...