2016-04-12 20 views
7

Qual è il modo convenzionale e ben educato per una macro per indicare che sono stati passati argomenti non validi?Qual è il modo convenzionale per indicare un errore all'interno di defmacro?

Sto scrivendo una macro in questo momento per accettare un sacco di definizioni. Se la stessa cosa viene definita due volte, la macro dovrebbe lamentarsi. Allo stesso modo, se una delle definizioni utilizza un termine che non è definito altrove nella stessa macro chiamata, la macro dovrebbe lamentarsi, si spera con i numeri di riga e di colonna in modo che il programmatore possa vedere esattamente dove si trova l'errore.

Attualmente sto pensando che lanciare un'eccezione abbia più senso, perché gli argomenti macro non validi sono in realtà un errore di compilazione. Tutto dovrebbe spegnersi in modo diverso rispetto a quando il compilatore ha trovato parentesi non bilanciate.

Se è corretto, qual è l'eccezione convenzionale da lanciare? E come includi il nome file e il numero di riga dello snippet di codice incriminato?

E se questo non è corretto, qual è l'approccio più Clojurely?

+0

Questa domanda sembra richiedere opinioni poiché parole come _conventional_ o _Clojurely_ indicano. Questo può generare risposte basate esclusivamente su opinioni che hanno scarso valore tecnico (_ "Mi piace farlo in modo' foo' way "_...). Potresti per favore [modificare] la tua domanda per concentrarti maggiormente sull'aspetto tecnico di ciò che vuoi ottenere? Ad esempio: _ "Come segnalare un argomento non valido passando da una macro? _" –

+0

Non è un problema pensare a _how_ per segnalare un errore in una macro: posso pensare a molti modi. Voglio sapere il modo _conventional_ di farlo in Clojure. –

risposta

6

Le eccezioni di proiezione sembrano corrette. Ho appena controllato la fonte Clojure e questo è il modo in cui è fatto lì:

(defmacro let ...) chiamate (defmacro assert-args ...), che genera eccezioni se gli argomenti non soddisfano le loro esigenze.

Problemi correlati