Ошибка Powershell при возвращении хеш-таблицы

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

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 ответ

Решение

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

Другие вопросы по тегам