Questo è probabilmente facile. Sappiamo che l'operatore &+
esegue l'aritmetica modulare su numeri interi (avvolge), mentre l'operatore +
causa un errore.Come si intrappolano gli errori di overflow aritmetico in Swift?
$ swift
1> var x: Int8 = 100
x: Int8 = 100
2> x &+ x
$R0: Int8 = -56
3> x + x
Execution interrupted. Enter Swift code to recover and continue.
Che tipo di errore è questo? Non riesco a prenderlo e non riesco a trasformarlo in un optional:
4> do {try x + x} catch {print("got it")}
Execution interrupted. Enter Swift code to recover and continue.
5> try? x + x
Execution interrupted. Enter Swift code to recover and continue.
Sono abbastanza sicuro che questo tipo di errore è lo stesso tipo di errore da this StackOverflow question (una divisione per zero) ma non so se questo tipo di errore possa essere intrappolato. Che cosa mi manca? Può essere intrappolato o no? Se é cosi, come?
Grazie, lo so che non è un errore di gettata (eccezione come dici tu, se Apple sembra evitare questo termine), in quanto non può essere catturato; Mi stavo chiedendo se c'è un modo per "intrappolarlo" comunque. Può darsi che gli errori di runtime in Swift non siano sostenibili; sarebbe una bella risposta. Non riesco a trovare alcuna informazione che dice esplicitamente che è così. Hai un riferimento? Credo che avrei potuto esprimere meglio la domanda. Mi piacerebbe sapere per certo che questi non possono essere gestiti. –
Un'eccezione non rilevata è un errore di runtime. Ma non tutti gli errori di runtime sono un'eccezione intercettabile. Quando i documenti ti dicono che qualcosa "è un errore di runtime" ti stanno dicendo che non puoi mai fare a meno di fare questa cosa; fermerà il tuo programma morto. Ad esempio, out-of-range è un errore di runtime. – matt
BTW Capisco la tua domanda (nel tuo commento), ma tutto quello che posso dirti è una decisione di progettazione. Ho avuto qualche discussione sul perché non rendessero le cose come fuori portata un'eccezione catchable, e la risposta era al di sopra del mio grado di paga; sembra che sarebbe troppo costoso. Avresti bisogno di parlare con un informatico per saperne di più. :) – matt