Powershellで関数を引数として渡す
方法1
関数を定義して、引数として渡すときに$funtion:<関数名>
としてやる
受け取った側は$func.Invoke(引数)
で実行可能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
function Square($n) {
$n * $n
}
function Cube($n) {
$n * $n * $n
}
function InvokeFunc($f) {
$f.Invoke(3)
}
echo "Funtion: Square"
InvokeFunc($function:Square)
# Output:9
echo "-----------"
echo "Function: Cube"
InvokeFunc($function:Cube)
# Output: 27
|
方法2
引数として渡すときに、スクリプトブロックを渡してやる
受け取った側が実行する方法は方法1と同じ
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function InvokeFunc($f) {
$f.Invoke(3)
}
echo "Script block: Square"
InvokeFunc({Param($n); $n * $n})
# Output: 9
echo "-----------"
echo "Script block: Cube"
InvokeFunc({Param($n); $n * $n * $n})
# Output: 27
|
おわり
他の言語でも関数の引数として関数を受け取ってラップする、みたいなことがあると思います。
Powershellでそれをやりたいことがあったので、どうすればいいか調べてみました。
参考
https://stackoverflow.com/questions/22129621/pass-function-as-a-parameter