Tratamento de erros



function!  attempt

Avalia um bloco e retonra o resultado ou none se ocorrer um erro.

>> attempt [a: 10 b: 9]        ;vamos tentar sem erros...
== 9

>> a
== 10                                ;... sem problemas!

>> attempt [a: 10 nosyntax]        ;nosyntax não tem valor: ERROR!
== none

native! try

Tenta computar um bloco. Retonra o valor do bloco, mas se ocorrer um error! , o bloco é abandonado e um valor de erro é retornado.
Para identificar um bloco que gera erro sem ter o erro impresso, usamos a função  error?.

Você pode estar se perguntando porque não usar  attempt ao invés de  error? & try. Eu acho que a resposta é que a combinação  error? & try retorna true e false, ao invés de none ou um resultado de computação. Isto é útil quando usado dentro de outras estruturas.

>> error? [nosyntax]
== false                        ;nosyntax não tem valor e gera um erro,
                               ;mas apenas se avaliado. Por sí só, não é um datatype error!  

>> try [nosyntax]
*** Script Error: nosyntax has no value
*** Where: try
*** Stack:                ; apenas "try" não funciona, dá erro!!

>> error? try [nosyntax]
== true                        ;OK!

native! catch e native! throw

Também são usados para tratar erros, mas eu não entendi como. Parece ser algo muito avançado para principiantes, como está discutido aqui.