36

ハッシュテーブルを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がデフォルトオプションを拡張するために使用するものと同じパターンが必要です(デフォルト値をマージしてオーバーライドします)。

4

2 に答える 2

35

括弧とコンマは使用しないでください。これが PowerShell です (たとえば、引数は CMD のコマンドの引数に似ています)。つまり、次のように関数を呼び出します。

ExtendHash $hash1 $hash2

あなたの場合、式($hash1,$hash2)は2つの項目の配列であり、この配列、1つの引数を関数に渡します。このような呼び出しは正しく失敗します。


使用するSet-StrictMode -Version 2と、この「よくある」間違いが PowerShell によってキャッチされます。

関数またはコマンドが、メソッドであるかのように呼び出されました。パラメータはスペースで区切る必要があります。パラメータの詳細については、about_Parameters ヘルプ トピックを参照してください。

于 2012-10-17T09:36:06.000 に答える