2011-01-30 7 views
22

Non capisco perché emma non dia copertura completa del codice ai blocchi "finalmente". Ho fatto un breve programma di esempio per dimostrarlo.Perché emma non fornisce una copertura completa per bloccare definitivamente?

Quando eseguire il programma mostra:

try 
finally 

Quindi non capisco il motivo per cui alla fine è segnato in rosso (non eseguita) e la "fine" "println" è contrassegnato giallo (esecuzione parziale) . Mi sto perdendo qualcosa? Come far capire a emma che il blocco finale è coperto?

example

Grazie!

risposta

16

C'è una voce su questo in EMMA Faq: Implicit branches due to finally blocks. che tocca l'argomento di blocchi finali parzialmente coperti. Forse questo aiuta.

+2

Grazie! Infatti, l'esecuzione del codice con e senza eccezioni all'interno del blocco try fornisce una copertura completa per il blocco finally. – stivlo

+0

@stivlo Puoi spiegare di più? – JPM

+3

@ JPM Il motivo è scritto nel collegamento fornito da aioobe: * Il compilatore deve assicurarsi che il codice di pulizia [il blocco finally] sia sempre eseguito, indipendentemente dal fatto che ci sia un'eccezione generata nel blocco try. Esistono quindi due possibili percorsi che conducono al blocco finally: con e senza eccezione in sospeso. * – stivlo

Problemi correlati