4

スプラッティングの目的で関数を参照してハッシュテーブルを渡したときに、問題が発生しました。どうすればこれを修正できますか?

Function AllMyChildren {
    param (
        [ref]$ReferenceToHash
    }
    get-childitem @ReferenceToHash.Value
    #  etc.etc.
}
$MyHash = @{
    'path' = '*'
    'include' = '*.ps1'
    'name' = $null
}
AllMyChildren ([ref]$MyHash)

結果:エラー(「スプラットされた変数をプロパティまたは配列式の一部として使用することはできません。式の結果を一時変数に割り当ててから、代わりに一時変数をスプラットします。」)。

これを実行しようとしました:

$newVariable = $ReferenceToHash.Value
get-childitem @NewVariable

それはうまくいき、エラーメッセージに従って正しいように見えました。このような場合に推奨される構文ですか?

4

1 に答える 1

4

1)ハッシュテーブル(またはクラスのインスタンス、つまり参照型)を[ref]渡すことは、常に参照自体によって渡されるため、意味がありません。[ref]値型(スカラーと構造体のインスタンス)で使用されます。

2)スプラッティング演算子は、式ではなく変数に直接適用できます。

したがって、問題を解決するには、関数内のハッシュテーブルをそのまま渡すだけです。

Function AllMyChildren {
    param (
        [hashtable]$ReferenceToHash # it is a reference itself
    )
    get-childitem @ReferenceToHash
    #  etc.etc.
}
$MyHash = @{
    'path' = '*'
    'include' = '*.ps1'
    'name' = $null
}
AllMyChildren $MyHash
于 2012-11-11T15:33:24.720 に答える