È possibile determinare in fase di esecuzione se il codice eseguito è in esecuzione come una funzione o uno script? Se sì, qual è il metodo raccomandato?Come determinare se il codice è in esecuzione come script o funzione?
risposta
+1 per una domanda molto interessante.
Posso pensare a un modo per determinarlo. Analizzare il file m eseguito da solo e controllare la prima parola nella prima riga non banale non di commento. Se è la parola chiave function
, è un file di funzione. Se non lo è, è una sceneggiatura. Ecco un accurato one-liner:
strcmp(textread([mfilename '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
Il valore risultante dovrebbe essere 1 se si tratta di un file di funzione e 0 se si tratta di uno script.
Ricordare che questo codice deve essere eseguito dal m-file in questione, e non da un file di funzione separato, ovviamente. Se si vuole fare una funzione generica da quella (cioè uno che mette alla prova ogni m-file), basta passare la stringa nome del file desiderato per textread
, in questo modo:
function y = isfunction(x)
y = strcmp(textread([x '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
Per rendere questa funzione più robusto , è anche possibile aggiungere un codice di gestione degli errori che verifica che il file m esista effettivamente prima di tentare di eseguire lo textread
.
C'è un altro modo. nargin(...)
dà un errore se è chiamato su uno script. La seguente funzione breve dovrebbe quindi fare quello che stai chiedendo:
function result = isFunction(functionHandle)
%
% functionHandle: Can be a handle or string.
% result: Returns true or false.
% Try nargin() to determine if handle is a script:
try
nargin(functionHandle);
result = true;
catch exception
% If exception is as below, it is a script.
if (strcmp(exception.identifier, 'MATLAB:nargin:isScript'))
result = false;
else
% Else re-throw error:
throw(exception);
end
end
Potrebbe non essere il modo più carino, ma funziona.
Saluti
Questo è fantastico, grazie! – slayton
- 1. Come determinare se il codice viene eseguito come una funzione o in modalità cella
- 2. WatchKit iOS - come determinare se il codice è in esecuzione nell'estensione dell'orologio o nell'app
- 3. Determinare se script Python è in esecuzione in locale o come CGI
- 4. Xcode/iOS: come determinare se il codice è in esecuzione in DEBUG/RELEASE?
- 5. Come sapere se il tuo codice è in esecuzione su un iPhone o un iPhone3G?
- 6. Come verificare se il codice js è in esecuzione sul server nodo o sul client
- 7. Come determinare se Rails è in esecuzione da CLI, console o come server?
- 8. Determinare se il programma è in esecuzione su Windows Server
- 9. C'è un modo per determinare se una funzione è in esecuzione nel documento pronta o no?
- 10. come determinare se uno script python viene importato come modulo o eseguito come script?
- 11. Come rilevare se uno script PHP è già in esecuzione?
- 12. Posso determinare se una funzione di PowerShell è in esecuzione come parte di una pipeline?
- 13. Script di Bash: determinare se il file è stato modificato?
- 14. Determinare il percorso dello script BASH esecuzione
- 15. Come posso sapere se il mio script Perl è in esecuzione in Windows?
- 16. Come determinare se un codice Swift è in esecuzione all'interno di XCode Playground
- 17. Controllare se il codice è in esecuzione in Interface Builder
- 18. Come determinare se la variabile è una funzione in Python?
- 19. Come determinare se i test PHPUnit sono in esecuzione?
- 20. Come posso determinare da uno script PowerShell in runtime in quale host è in esecuzione?
- 21. Come verificare se nginx è in esecuzione o no?
- 22. Determinare se una funzione è disponibile in un modulo Python
- 23. Come sapere se un MediaRecorder è in esecuzione o no?
- 24. Come determinare la directory in cui risiede uno script Haskell o un'applicazione in esecuzione?
- 25. Determinare se l'applicazione ASP.NET è in esecuzione in locale
- 26. Come posso rilevare se il mio codice è in esecuzione nella console in Rails 3?
- 27. Come determinare se il metodo è asincrono in fase di esecuzione
- 28. Come controllare se l'applicazione è in esecuzione
- 29. Come determinare se sono in PowerShell o cmd?
- 30. Determinare se O/S è Windows 7
Perfetto, grazie! – slayton