当我了解 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)