Ошибка Powershell при возвращении хеш-таблицы - PullRequest
3 голосов
/ 19 сентября 2010

У всех есть идеи, почему следующий код может вызвать ошибку, см. Дополнительные комментарии после функции для получения более подробной информации

function callee    ([Hashtable]$arg0) {
    [Hashtable]$hashtable = @{}
    $hashtable = $arg0
    $hashtable.add('passed', $True)
    # $hashtable                            ######## toggle this line
    $type = $hashtable.GetType()
    Write-Host "$type"
    return $hashtable
}

function caller {
    [Hashtable]$hashtable = @{'00'='0'}
    $hashtable = callee $hashtable        ##### returns error here
    $hashtable.add('returned', $True)
    $hashtable
}
caller

сообщение об ошибке: Невозможно преобразовать значение "System.Object []" типа "System.Object []" в тип "System.Collections.Hashtable".

Я получаю ошибку в разных случаях, я пытался сузить ее до примера, который легко воспроизвести. Похоже, что он меняет хеш-таблицу на массив объектов, и поэтому не возвращает его? Это позволяет мне изменять хэш-таблицу и возвращать ее, но когда я пытаюсь отобразить ее, она меняет ее? Это тот же эффект, который я получаю, когда начинаю добавлять код в функцию вызываемого абонента?

1 Ответ

8 голосов
/ 19 сентября 2010

Когда вы раскомментируете # $hashtable, вы выводите две функции из функции.Результатом этой функции является все «выходные данные», и PowerShell автоматически объединит несколько выходных данных в массив.Оператор return удобен при коротком замыкании, и его не следует путать с единственным способом возврата значения из функции.

...