質問

私は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

なぜ一つの発現のトリガトラップおよび他のないの?

役に立ちましたか?

解決

私はパースエラーであるためにあなたの最初のケースを検討します。すなわち、ゼロ例外によって除算を取得するため、パーサはその時点で定数畳み込み(値を事前計算)、エラーを実行しようとしています。その他の構文エラーは、すなわち、彼らはトラップをトリガしません同じように振る舞うます:

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.

次にトラップ火災パーサはもはや値を事前に計算することはできませんので。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top