任何人都有任何想法为什么以下代码会产生错误,请参阅该函数后的其他注释以获取更多详细信息
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”类型。
我收到各种情况的错误,我试图将其缩小到一个易于重现的例子。看起来它正在将哈希表更改为对象数组,这就是为什么它不会返回它?它允许我修改哈希表并返回它但是当我尝试显示它时会改变它吗?这与我开始向被调用函数添加代码时获得的效果相同吗?
答案 0 :(得分:8)
当您取消注释# $hashtable
时,您将从该函数中输出两个内容。该函数的结果是它的所有“输出”,PowerShell将自动将多个输出包装到一个数组中。 return语句是一种短路方便,不应与从函数返回值的唯一方法相混淆。