2013-11-14 5 views
2

У меня есть код, который работает, но я понятия не имею, ПОЧЕМУ он работает.Попытка понять этот код (создание диапазона [char])

Это создаст список, содержащий каждую букву английского алфавита:

[char[]]([char]'a'..[char]'z') 

Однако, это не будет:

[char]([char]'a'..[char]'z') 

, и это будет на самом деле создать список чисел от 97 - 122

([char]'a'..[char]'z') 

Может ли кто-нибудь из экспертов объяснить мне, как это работает (или нет)?

ответ

5

В Powershell 'a' - это тип [string]. [char] 'a' - это, очевидно, тип [char]. Это разные вещи.

$string = 'a' 
$char = [char]$string 

$ string может быть отлит как [char], потому что это строка, состоящая из одного символа. Если в строке имеется более одного символа, например. 'ab', то вам нужен массив [chars], который является типом [char []]. Дополнительный набор квадратных скобок обозначает массив.

$string | get-member 
$char | get-member 

раскрывает много разных методов для двух типов. Тип [char] имеет методы .toint(). Если вы укажете его как [int], он примет числовой код ASCII для этого символа.

[int]$char 

возвращает 97, код ASCII для буквы 'а'.

+0

Ах! Так что дополнительный набор скобок означает, что это «тип» массива ... Интересно :) Спасибо –

7

Во втором примере вы пытаетесь передать массив символов одному символу [char]. Это не сработает. В третьем примере 'a' считается строкой от PowerShell. Поэтому, бросая его на [char], говорит PowerShell, что это единственный символ. Оператор .. находится в диапазоне от номеров. К счастью, PowerShell может преобразовать символ «a» в его значение ASCII 97 и «z» на 122. Таким образом, вы фактически завершите работу с 97..122. Затем в вашем первом примере [char[]] преобразует этот массив из ints обратно в массив символов: от a до z.

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