trampa de PowerShell no se dispare constantemente
-
21-09-2019 - |
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?
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