またまたスコープ。
以前の、PowerShell: ◆スコープ、PowerShell: ◆スコープ2の補足。
PowerShell: ◆スコープ2ではfunction内からスクリプトスコープの変数に値を設定するのに$script:変数名を使ったがSet-Variableコマンドレットを使っても可能なようだ。
001 002 003 004 005 006 007 008 009 | $a = 1 function fncA{ $a Set-Variable -Name a -Value ($a+2) -Scope 1 $script:a = $a + 3 $a } fncA $a |
-Scopeパラメータに0を指定すると現在のスコープ、1を指定すると一つ上(親)のスコープに値が設定できる。
ちなみに、このスコープを2にしてこのまま実行すると2つ上の親は居ないのでエラーになるが、コマンドラインからこのスクリプトを呼び出すとこうなる。
この時コマンドラインから$aを表示するとグローバルスコープの値3が表示される。
最初の例に戻って3行目の$a を $a = 1 に変えてみる。
結果は想像つくだろうか。
試してみるとこうなる。
なんとなくPowershellばかり普段使っていると若干違和感のある結果だが、1行目と3行目はC#で書けば、 int a = 1; だと再認識すれば当たり前の結果だと判る。
0 件のコメント:
コメントを投稿