2009-12-24 17 views
5

Quando sto programmando in Erlang, devo convalidare tutti i valori di ritorno dalle chiamate di funzione per il successo tramite la corrispondenza del modello anche se non intendo utilizzare il valore restituito? La maggior parte delle API di Erlang che ho visto finora non generano eccezioni per errore (ma restituiscono qualcosa come {errore, errore}), quindi devo necessariamente convalidare il valore restituito sì? Qualche eccezione a questo, in cui non ho davvero bisogno di preoccuparmene?Devo essere pattern matching ogni valore restituito?

risposta

11

È buono lo stile di programmazione per arrestarsi il prima possibile quando qualcosa non funziona. Tutto ciò che viene eseguito dopo verrà eseguito con il sistema in uno stato sconosciuto.

A meno che non si intenda gestire il valore dell'errore e fare qualcosa su di esso, si scrive il codice per il caso riuscito. Come nel seguente piccolo ciclo triste:

life() -> 
    ok = work(), 
    ok = rest(), 
    life(). 
+0

Christian ha detto tutto ... + 1. – jldupont

+0

Sì, questo è quello che ho pensato. Il problema è che una delle API di terze parti che sto utilizzando non restituisce bene il successo. Dopo aver salvato un documento, restituisce il documento salvato stesso. Torno SomeComplexDoc piuttosto che {ok, SomeComplexDoc}. –

+3

@Jeremy, puoi semplicemente salvare il documento e quindi abbinare su di esso nella riga successiva. 'Doc = my_api_call()', 'ok = is_valid_doc (Doc)'. – Zed