goo blog サービス終了のお知らせ 

Sceneries through the lenses

その場の気分でもやっと投稿していくブログ。内容はころころ変わります…(汗。

Windows PowerShell その4 : Function を使う その2

2010-01-03 12:19:12 | OSS/Programming

Windows PowerShell その3 : Function を使う
の続き。

1) Function の呼び出し方法が違ってた…(汗。

(a,b,c) のような書き方は配列として扱われるようだ。
とりあえず、次のような簡単なスクリプトを用意。

========================

Function func($x,$y) {

echo call func
echo ====== x =======
$x
echo ====== y =======
$y
echo ================

}

func
func 1 2
func(1,2)
func("a","b","c")

========================

実行結果がこれ。
$x, $y に対して値の入力ができているのは2つ目の func 1 2 のみ。

========================

PS C:UsersyasuhiroDocuments> .test.ps1
call
func
======
x
=======
======
y
=======
================
call
func
======
x
=======
1
======
y
=======
2
================
call
func
======
x
=======
1
2
======
y
=======
================
call
func
======
x
=======
a
b
c
======
y
=======
================

========================

[int] などを使って、キャストも可能らしい。


Function func([int] $x,[int] $y) { } という感じ。
この場合、func(1,2) なんて呼び出しは NG 。エラーが出ます。
$x に配列を入れようとしてエラーを起こすというのが真実。
これを見るまで気が付きませんでした…(汗。

========================
func : パラメーター 'x' の引数変換を処理できません。"System.Object[]" の値を "System.Object[]" 型から "System.Int32" 型
に変換できません。
発生場所 C:UsersyasuhiroDocumentstest.ps1:14 文字:5
+ func <<<< (1,2)
+ CategoryInfo : InvalidData: (:) [func]、ParameterBindin...mationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,func
========================



2) Function の返り値
今度は適当な関数を作る。
とりあえず、引数として数値を2つ受け取り、
適当な計算を行う。

Function の返り値の定義方法として return が用意されているが、
return だけが返り値となるわけではないらしい。
実行結果を見るとはっきりする。

===============================

Function func([int]$x,[int]$y) {

$x + $y
$x - $y

$a = $x * $y

pwd

return 5

}

$a = func 1 2

$a

===============================


Function の返り値は Function 内の出力結果全てとなるらしい。
上記の実行結果が下記の通り。

普通の感覚なら、$a = func 1 2 での呼び出しの返り値は return 5 なので、
最終行の $a で 5 だけ出力されそうなイメージするのだが、
func 内に $x + $y, $x - $y, pwd が実行されており、最後に return 5。
そのため、出力結果は $x + $y, $x - $y の計算結果 3, -1 が出力後、
pwd の出力結果、最後に 5 という結果になっている。

$a = $x + $y は結果を $a に代入しているので出力されない。

また、Function func と 外側の両方に $a が定義されているが、
独立していることが分かる。
まぁ、関数で外と同じというグローバル変数扱いされても困るんだが。

===============================

PS C:Users> .test.ps1
3
-1

Path
----
C:Users
5

===============================


っと、癖が強いなぁ…。

最新の画像もっと見る

コメントを投稿