Pergunta

Não consigo entender por que estou vendo esse comportamento no 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 que uma expressão aciona a armadilha e a outra não?

Foi útil?

Solução

Eu consideraria seu primeiro caso como um erro de análise. Esse é o analisador está tentando fazer dobragem constante (pré -computando o valor) e erros nesse ponto, porque recebe uma exceção de divisão por zero. Outros erros de sintaxe se comportam da mesma maneira que eles não acionam a armadilha:

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

Se você alterar o código para isso:

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

Em seguida, a armadilha dispara porque o analisador não pode mais pré -computar o valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top