0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Powershell の関数定義で気を付けること

Posted at

自分向けの忘備です。

Powershell の関数定義で気を付けること

関数定義を Javascript みたいに書きたくなる。

function foo( $a, $b ) {
    return $a + $b
}

Write-Host foo( "AAA", "BBB" )

=> foo AAA BBB
AAABBB を期待していたのだけれど、それとは異なる結果である。

さては関数定義が悪いのだろう、デバッグのヒントとなるよう、コロンを埋め込んでみる。

function foo( $a, $b ) {
    return "{0}:{1}" -f $a, $b
}

Write-Host foo( "AAA", "BBB" )

=> foo AAA BBB
前と同じ結果だし、コロンすら表示されないってどういうこと?

実は、定義側ではなく、呼び出し側に問題がある。
試しに、上記の呼び出し方を分解しててみると

function foo( $a, $b ) {
    return "{0}:{1}" -f $a, $b
}

Write-Host foo
Write-Host ( "AAA", "BBB" )

=> foo
=> AAA BBB
関数 foo を評価せぬまま終了していることがわかる。

正解は、これ。

function foo( $a, $b ) {
    return "{0}:{1}" -f $a, $b
}

Write-Host (foo "AAA" "BBB")

関数名と引数をスペース区切りで並列に書く。その全体を括弧で囲う。

括弧は式評価の意味なのでさしたる特別感はないけれど、引数はスペース区切りなのね...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?