Czy w czasie wykonywania można określić, czy wykonywany kod działa jako funkcja, czy skrypt? Jeśli tak, jaka jest zalecana metoda?Jak ustalić, czy kod jest wykonywany jako skrypt lub funkcja?
Odpowiedz
+1 za bardzo interesujące pytanie.
Mogę wymyślić sposób na określenie tego. Przetwórz sam wykonany plik m i sprawdź pierwsze słowo w pierwszej nietrywialnej linii bez komentarza. Jeśli jest to słowo kluczowe function
, jest to plik funkcji. Jeśli nie, to jest skrypt. Oto schludny jeden-liner:
strcmp(textread([mfilename '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
Uzyskaną wartość powinna wynosić 1, jeśli jest to plik funkcja, i 0, jeśli jest to skrypt.
Należy pamiętać, że ten kod musi być uruchamiany z pliku m, o którym mowa, a nie z osobnego pliku funkcji, oczywiście. Jeśli chcesz utworzyć funkcję rodzajowe z tego (tj jednej, która testuje każdą m-pliku), po prostu przekazać żądaną nazwę pliku ciąg textread
, tak:
function y = isfunction(x)
y = strcmp(textread([x '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
Aby to funkcja bardziej wytrzymałe można również dodać kod obsługi błędów, który sprawdza, czy plik-m rzeczywiście istnieje przed próbą utworzenia go.
Jest inny sposób. nargin(...)
podaje błąd, jeśli jest wywoływany w skrypcie. Następująca krótka funkcja powinna więc spełniać następujące warunki:
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
To może nie być najpiękniejszy sposób, ale działa.
Pozdrawiam
To świetnie, dzięki! – slayton
- 1. Jak ustalić, czy kod jest wykonywany jako funkcja lub przy użyciu trybu komórki?
- 2. Jak ustalić, który skrypt jest wykonywany w procesie PHP-FPM
- 3. Jak sprawdzić, czy skrypt powłoki Linux jest wykonywany przez cronjob?
- 4. Jak dokładnie wykonywany jest skrypt PHP?
- 5. Dlaczego kod statyczny podkategorii jest wykonywany?
- 6. Jak ustalić ciąg jest angielski lub perski?
- 7. Jak ustalić, czy klucz jest literą lub cyfrą?
- 8. Jak ustalić, czy używać XMLHttpRequest lub XDomainRequest?
- 9. Czy doFilter() jest wykonywany przed lub po zakończeniu pracy serwletu?
- 10. Jak ustalić, czy kod działa w kontekście obsługi sygnału?
- 11. Postman pre-prośba skrypt wykonywany po żądaniu
- 12. Jak ustalić, czy typ jest typem kolekcji?
- 13. Jak ustalić, czy Kopiowanie lokalne jest konieczne?
- 14. Jak często wykonywany jest GK?
- 15. Jak ustalić, czy drzewo binarne jest kompletne?
- 16. Jak ustalić, czy IType jest klasą abstrakcyjną?
- 17. Jak ustalić, czy kod Swift działa na XCode Playground
- 18. Jak ustalić, czy testy PHPUnit są uruchomione?
- 19. Jak ustalić, czy funkcja Perl istnieje w środowisku wykonawczym?
- 20. Czy istnieje sposób sprawdzenia, czy skrypt powłoki jest wykonywany z flagą -x
- 21. Czy jest to błąd lub funkcja ManagementScope?
- 22. Jak ustalić, czy kolumna widoku jest wyprowadzona czy stała?
- 23. Jak ustalić, czy powiązanie szyn jest przyspieszone?
- 24. Jak ustalić, czy ścieżka jest podkatalogiem innej?
- 25. Jak ustalić, czy mój proces jest uruchamiany interaktywnie?
- 26. Kod modułu ES6 wykonywany za każdym razem, gdy jest importowany
- 27. Sprawdź, czy funkcja lub metoda jest normalna lub asynchroniczna.
- 28. Jak ustalić, czy obiekt jQuery jest odroczony?
- 29. Jak ustalić, czy jednostka doktrynalna jest trwała?
- 30. Jak ustalić, czy NSString jest pusty?
Doskonale, dzięki! – slayton