Ошибка 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 удобен при коротком замыкании, и его не следует путать с единственным способом возврата значения из функции.