当我了解 Perl 和 PowerShell 的不同之处时,我试图确定通过引用传递和更新列表之间的差异。我想我现在明白了,PowerShell 明智的。
通过引用传递哈希表:
调用函数时:不必在表名前加上[ref]. 在函数内:列表中的表名param可以简单地以 开头[hashtable],而不是[ref]— (因为“收到”它已经是一个引用;所以向我解释了)。如果要在函数内更新哈希表,.Value则在未使用时[ref]不需要。IOW:以这种方式调用函数:MyFunction $MyHashTable. 该函数包含:
param([hashtable]$HashNameWithinFunction)
$HashNameWithinFunction.Add('x', 'y')
通过引用传递数组:
无论是在调用函数时还是在函数param()列表中:数组的名称必须以[ref]. 当数组要通过引用更新时,.Value必须使用。该函数是这样调用的:MyFunction ([ref]$MyArray). 该函数包含:
param([ref]$ArrayNameWithinFunction)
$ArrayNameWithinFunction.Value += 'something new'
我的理解正确吗?我已经测试了上述内容,并且我知道两者都有效。但是,以这些方式进行操作是否有可能出现一些细微的错误?
添加以下来自 Chrstian 的回复:
function UpdateArray {
param([ref]$ArrayNameWithinFunction)
$ArrayNameWithinFunction.Value += 'xyzzy'
}
$MyArray = @('a', 'b', 'c')
UpdateArray ([ref]$MyArray)