Pregunta

No puedo entender por qué estoy viendo este comportamiento en 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

¿Por qué una expresión desencadenar la trampa y el otro no?

¿Fue útil?

Solución

Me considero su primer caso de ser un error de análisis. Ese es el analizador está tratando de hacer el plegado constante (precomputen el valor) y los errores en ese punto porque se pone una división por cero excepción. Otros errores de sintaxis se comportan de la misma manera, es decir que no activan la trampa:

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

Si cambia el código para esto:

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

A continuación, los incendios trampa porque el analizador ya no pueden calcular previamente el valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top