PowerShell関数にハッシュテーブルを渡すと、オブジェクトを受け取ると文句を言います。
Function ExtendHash(){
param(
[hashtable] $source,
[hashtable] $extender
)
...
}
そして、呼び出し元:
$hash1 = @{One = 1; Two = 2}
$hash2 = @{Two = 22; three = 3}
ExtendHash($hash1, $hash2)
System.Object []型のSystem.Object []値をSystem.Collection.Hashtable型に変換できません
それでは、この作業をどのように行うのでしょうか?提案?
また、組み込みのものがありませんか? JavaScriptがデフォルトオプションを拡張するために使用するものと同じパターンが必要です(デフォルト値をマージしてオーバーライドします)。
括弧とコンマを使用しないでください。これはPowerShellです(たとえば、引数はCMDのコマンドの引数に似ています)。つまり、次のように関数を呼び出します。
ExtendHash $hash1 $hash2
あなたの場合、式($hash1,$hash2)
は2つの項目の配列であり、この配列、1つの引数を関数に渡します。このような呼び出しは正しく失敗します。
Set-StrictMode -Version 2
を使用すると、この「よくある」間違いがPowerShellで検出されます。
関数またはコマンドがメソッドのように呼び出されました。パラメーターはスペースで区切る必要があります。パラメーターの詳細については、about_Parametersヘルプトピックを参照してください。
( ローマの答え :)の隣
呼び出し側はハッシュテーブルを変数に保存する必要がなく、これも使用できます:
ExtendHash -source @{One = 1; Two = 2} -extender @{Two = 22; three = 3}
(-source
と-extender
が必要なので、ハッシュテーブル自体はExtendHash
に対してそれ自体でarg-value-pairsとして解釈されません)