C'è un modo per accedere al valore di ritorno di una funzione che viene tracciata da una funzione specificata come parametro di uscita da tracciare? Sembra difficile da capire, ma non sono stato in grado di semplificare la domanda senza perdere le informazioni. Quindi ecco un semplice esempio.Come accedere a un valore di ritorno di una funzione che viene tracciata
abbiamo una semplice funzione di
add10 <- function(a){
a + 10
}
E qualche funzione che vogliamo essere chiamato quando chiamata a Add10 uscite.
trace.exit() <- function(){
...
}
La traccia è impostata nel seguente modo.
trace(add10, exit=trace.exit)
e facciamo un appello a Add10
add10(5)
quanto ho capito da ora, saranno chiamati trace.exit
dopo add10
terminato l'esecuzione. C'è un modo per accedere al valore di ritorno di add10
all'interno di trace.exit
?
Sento che dovrebbe esserci. Ma giocando con sys.frames
e guardando attraverso gli ambienti non ero in grado di ottenerlo.
Il motivo è il desiderio di catturare tutte le chiamate per alcune funzioni e restituire i valori che danno.
UPD Soluzione con involucro o qualcosa di simile è bello, ma trace
implementa già un motivo decoratore, quindi la mia domanda è su come accedere valore restituito da trace
, non di risolvere il problema di decoratori in R.
È difficile vedere dove si nasconde quel valore restituito. In C, i valori alcuni vicini tra loro in [context.c] (https://github.com/wch/r-source/blob/fba3c1b0ac71bb5a681b2c1437ce2a38dfa3bb61/src/main/context.c#L197). Da quello che posso dire, il 'jumpfun' dovrebbe impostare il valore restituito a' val' nel contesto corretto, ma sembra che la funzione 'on.exit' possa essere eseguita in un contesto differente. Speravo che fosse disponibile in ".Last.value", ma sembra non esserlo. Forse è l'interfaccia utente che aggiorna quel valore. – MrFlick