Многомерный массив доступа PowerShell, разбитый на enum - PullRequest
0 голосов
/ 23 января 2019

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

Ошибка операции индексации; индекс массива оценивается как ноль.

Любая помощь будет оценена,

Спасибо

Код Powershell:

Enum X {
 X1
 X2
}

Enum Y {
 Y1
 Y2
}

$map = @{ 

    [X]::X1=@{ 

        [Y]::Y1="Hello World"
    };

    [X]::X2=@{
        [Y]::Y1="Hello World"
    }  
};

function getElementFromMap([X] $x, [Y] $y) {
    Write-Host $map[$x][$y]
}

getElementFromMap([X]::X1, [Y]::Y1);

1 Ответ

0 голосов
/ 23 января 2019

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

Сделайте это вместо:

getElementFromMap ([X]::X1) ([Y]::Y1)

Скобки есть, поэтому PowerShell оценивает выражения и не обрабатывает их как строки.

Следующее также будет возможно, поскольку значения будут интерпретироваться как строки и автоматически преобразовываться в функцию, поскольку вы указали типы параметров в определении функции ([X]$x, [Y]$y):

getElementFromMap X1 Y1

# or
getElementFromMap "X1" "Y1"

Смотрите здесь , чтобы узнать больше о двух режимах синтаксического анализа PowerShell (режим выражения и режим аргумента).

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