Se scrivo una funzione o un modulo che chiama un altro modulo, come posso ottenere il nome della funzione/modulo di chiamata? Questo sarebbe utile per scopi di debug.Come posso ottenere il nome di una funzione di chiamata all'interno di un modulo in Mathematica?
risposta
Lo farà esattamente ciò che si desidera, fornendo un elenco di "tag" (per i propri scopi, leggi "funzioni") presenti nello stack di chiamate. Non è a prova di proiettile, a causa dell'esistenza di altre funzioni come StackBegin
e StackInhibit
, ma quelle sono molto esotiche per cominciare.
Nella maggior parte dei casi, Stack
restituirà i simboli che denominano le funzioni da valutare. Per capire da quale contesto provengono quei simboli, puoi usare Context
function, che è il più vicino possibile a capire di quale pacchetto fanno parte. Ciò richiede una certa attenzione, tuttavia, poiché i simboli possono essere aggiunti ai pacchetti dinamicamente (tramite Get
, Import
, ToExpression
o Symbol
) e possono essere ridefiniti o modificati (con nuove regole di valutazione, ad esempio) anche in altri pacchetti.
Grazie! Stack [_] è quello che stavo cercando. – Tony