PowerShell: разница между обозначениями массивов? - PullRequest
3 голосов
/ 11 октября 2011

Есть ли разница между этими двумя операторами создания массива? Итак, является ли знак «@» необязательным при создании массивов?

$a = "This", "Is", "a", "cat"
$a.GetType()
$a | gm
$a = @("This", "Is", "a", "cat")
$a.GetType()
$a | gm

Ответы [ 2 ]

6 голосов
/ 11 октября 2011
$a = @() # declare an empty array.

$a = @(mysingleitem) # declare an array with a single element

В другом случае необязательно.

2 голосов
/ 11 октября 2011

Есть ли разница между этими двумя операторами создания массива?

Хотя я не уверен на 100% (это зависит от внутренностей PowerShell), разница может быть следующей: "This", "Is", "a", "cat"создает массив.@("This", "Is", "a", "cat") создает тот же массив и , затем применяет к нему оператор @ () (в данном случае это явно избыточная операция).

Использование, например, этого профилировщика мы можем видеть, что второе выражение довольно медленное (14% или около того), так что мое предположение может быть правильным.В идеале интерпретатор кода PowerShell может обрабатывать эти два выражения одинаково, но, вероятно, это не так.

См. Также раздел справки (конец, об операторах @() и ,)

help about_operators
...