【发布时间】:2012-11-05 04:22:08
【问题描述】:
当我了解 Perl 和 PowerShell 的不同之处时,我试图确定通过引用传递和更新列表之间的差异。我认为我现在明白了,PowerShell 方面的。
通过引用传递哈希表:
调用函数时:不必在表名前加上[ref]。在函数内部:param 列表中的表名可以简单地以[hashtable] 开头,而不是[ref] — (因为“收到”它已经是一个引用;所以向我解释了)。如果要在函数内更新哈希表,则在未使用[ref] 时不需要.Value。 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)
【问题讨论】:
-
抱歉,但是.. 您使用的具有
value属性的数组是什么? -
命名变量,表示对数组的引用(在函数内)。我会用一个简短的例子来更新这个问题。
-
修正后的值参数更有意义,不需要你的例子!
标签: arrays powershell hashtable pass-by-reference