PerlとPowerShellの違いについて学ぶとき、参照によってリストの受け渡しと更新の違いを突き止めようとしています。PowerShellに関しては、今、私はその考えを理解していると思います。
参照によってハッシュテーブルを渡します。
関数が呼び出されたとき:テーブル名の前に。を付ける必要はありません[ref]
。関数内:リスト内のテーブル名の前には、—ではなくparam
単に、を付けることができます(「受け取ったまま」はすでに参照であるため、説明されました)。関数内でハッシュテーブルを更新する場合は、使用されていない場合は必要ありません。IOW:次のように関数を呼び出します:。関数には次のものが含まれます。[hashtable]
[ref]
.Value
[ref]
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)