3

Powershell でこの動作が見られる理由がわかりません。

PS C:\> trap { "Got it!" } 1/0
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/0 <<<<

PS C:\> trap { "Got it!" } 1/$null
Got it!
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/$ <<<< null

ある式ではトラップがトリガーされ、別の式ではトリガーされないのはなぜですか?

4

1 に答える 1

5

最初のケースは解析エラーだと思います。つまり、パーサーは定数畳み込み(値の事前計算)を行おうとしており、ゼロ除算の例外が発生するため、その時点でエラーが発生します。他の構文エラーも同じように動作します。つまり、トラップはトリガーされません。

trap { "Got it!" } 1/;
You must provide a value expression on the right-hand side of the '/' operator.

コードを次のように変更した場合:

$denom = 0
trap { "Got it!" } 1/$denom
Got it!
Attempted to divide by zero.

次に、パーサーが値を事前計算できなくなったため、トラップが発生します。

于 2009-09-04T17:42:46.570 に答える