2012-04-03 34 views
1

PowerShellで関数を定義し、以下のように呼び出そうとしています。2つの整数引数を持つ関数を呼び出すときにエラーが発生する

function foo([Int32] $a, [Int32] $b) 
{ 
} 
foo(0,0) 

これを行うと、次のエラーが発生します。

foo : Cannot process argument transformation on parameter 'a'. Cannot convert the "System.Object[]" value of type "System.Object[]" to type 
"System.Int32". 
At line:1 char:4 
+ foo <<<< (0,0) 
    + CategoryInfo   : InvalidData: (:) [foo], ParameterBindin...mationException 
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,foo 

以下のように1つの引数だけを受け入れるように関数を変更した場合、正常に動作します。

function foo([Int32] $a) 
{ 
} 
foo(0) 

また、タイプ情報を削除すると、次のようにも動作します。

function foo($a, $b) 
{ 
} 
foo(0,0) 

最初のバージョンに問題がありますか?複数の整数引数を取る関数を正しく定義するにはどうすればよいですか?

編集:興味深いことに、次の呼び出しが機能します。

foo 0 0 

私は()の方が好きで、それをどのように動作させるのかと思っています。 PowerShellのパラメータで

答えて

9

は、括弧トライせずに渡されます。

foo 0 0 

は、あなたが最初のパラメータとしてのオブジェクトの配列を渡している

のfoo(0,0)

を行います。

あなたは配列を渡して、各値をスクリプト内のパラメータとして分割することができますが、それはなぜですか?

+0

OK感謝!私はちょうどC + +からギアを切り替えて、かっこをあきらめる必要があるように見えます:) – Nerdtron

+5

この一般的なgotchaは、タグwiki(よくある質問と呼ばれる)で言及されています - http://stackoverflow.com/tags/powershell/info 。 –

+0

リンクありがとうございました。 – Nerdtron

0
Function MyFunction ([int32]$arg1,[int32]$arg2) 
{ 


    $data= $arg1+$arg2 
return $data 


} 

MyFunctionを2つの4

+0

argをint32に変換する例です – bala

関連する問題