Question

Je ne comprends pas pourquoi je vois ce comportement dans 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

Pourquoi une expression déclenche le piège et l'autre ne fonctionne pas?

Était-ce utile?

La solution

Je considère votre premier cas être une erreur d'analyse. C'est l'analyseur tente de faire plier constante (précalcul la valeur) et des erreurs à ce moment-là parce qu'il obtient une division par zéro exception. D'autres erreurs de syntaxe se comportent de la même manière dire qu'ils ne déclenchent pas le piège:

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

Si vous modifiez le code à ceci:

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

Ensuite, les feux de piège parce que l'analyseur ne peut plus précalculer la valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top