Occasionalmente ci piace esaminare in che modo determinate funzioni sono state definite (quando sono scritte in Mathematica) System`
. Questa domanda riguarda il modo migliore per farlo.Qual è il modo migliore per leggere il codice della funzione già definita (in particolare dal contesto System`)?
punti da tenere a mente:
Di couse
ReadProtected
deve essere rimosso prima.I build di solito devono essere utilizzati almeno una volta prima che vengano caricati nel kernel. Una semplice invocazione semplice di solito è sufficiente per questo quando hanno funzionalità estese (ad esempio attraverso le opzioni)?
Information
(??
) fornisce la definizione in un formato di difficile lettura (nessun rientro e tutti i nomi di contesto privati preceduti). Qual è il modo migliore per sbarazzarsi dei nomi di contesto e ottenere il codice formattato?Un'idea per sbarazzarsi di determinati contesti è
Block[{$ContextPath = Append[$ContextPath, "SomeContext`Private`"], Information[symbol]]
. Il codice può essere formattato automaticamente usando Workbench. Rimangono alcuni problemi, ad es.Information
non cita stringhe, impedendo che il codice possa essere copiato in Workbench.
In generale, mi interessa come la gente lo fanno, quali sono i metodi che usano per rendere il codice di comandi incorporati come facile da leggere il più possibile.
Caso di utilizzo: ad esempio, recentemente ho inserito il codice di RunThrough
quando ho scoperto che semplicemente non funziona su Windows XP (risulta che non riesce a citare i nomi dei file temporanei quando il percorso contiene spazi).
Aggiornamento:It appears che ha usato per essere una funzione per le definizioni di stampa senza contesto preposto, Developer`ContextFreeForm
, ma non funziona più nelle versioni più recenti.
È possibile eliminare i nomi di contesto privati inserendo il contesto prima di chiamare '?? '. –
cah