您可以在運行時確定執行的代碼是作爲函數還是腳本運行?如果是,那麼推薦的方法是什麼?如何確定代碼是否作爲腳本或函數執行?
11
A
回答
6
+1對於一個非常有趣的問題。
我可以想出一種方法來確定。解析執行的m文件本身並檢查第一個非重要的非註釋行中的第一個單詞。如果它是function
關鍵字,它是一個功能文件。如果不是,它是一個腳本。 這裏有一個整潔的一行代碼:
strcmp(textread([mfilename '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
結果值應爲1,如果它是一個函數文件,並0,如果它是一個腳本。
請記住,該代碼需要從有問題的m文件運行,當然不是從單獨的函數文件運行。如果你想使一個泛型函數的是(即一個測試任何m文件),只需通過所需的文件名字符串textread
,像這樣:
function y = isfunction(x)
y = strcmp(textread([x '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
爲了使這個功能更強大的,您還可以添加錯誤處理代碼,在嘗試textread
之前驗證該m文件實際存在。
7
還有另外一種方法。如果在腳本上調用它,則會出現錯誤nargin(...)
。因此,以下短的功能應該做你所要求的:
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
它可能不是最漂亮的方式,但它的工作原理。
Regards
+0
這太棒了,謝謝! – slayton
相關問題
- 1. 如何確定是否從crontab執行python腳本?
- 2. 有可能確定ruby代碼塊是在http服務器下執行還是作爲獨立腳本執行?
- 3. Jquery Ajax PHP - 如何確定PHP代碼是否成功執行?
- 4. 如何確定函數是否爲空
- 5. 如何確定代碼是作爲函數執行還是使用單元模式
- 6. Bash是否將您的代碼作爲腳本或命令運行
- 7. 從mysql過程或函數或工作臺執行python腳本?
- 8. 是我爲sparql執行寫的代碼是否正確?
- 9. 執行exec函數的python代碼是否被編譯爲可執行文件?
- 10. 如何確定函數是否會返回子函數而不執行
- 11. PowerShell命令或代碼知道腳本執行是否已停止
- 12. AutoIt腳本是否作爲服務執行,用於GUI操作?
- 13. 如何添加腳本作爲代碼?
- 14. 在調用函數之前執行Greasemonkey腳本中的代碼
- 15. 如何確定我的DLL是否正在註冊或執行?
- 16. 如何通過python setuptoos執行腳本或函數?
- 17. 是否有執行所有短代碼後執行函數的方法? (或更高版本)
- 18. 作爲特定用戶執行腳本
- 19. R:代碼一行一行,但沒有作爲函數執行
- 20. 將代碼顯示爲代碼並且不可執行腳本
- 21. 確定給定的文本是否爲C代碼
- 22. 確定文件是否爲腳本或不
- 23. 如何確定python腳本是作爲模塊導入還是作爲腳本運行?
- 24. 如何知道在大量代碼中執行哪個java腳本函數?
- 25. 如果前面的腳本失敗,JavaScript代碼段執行或不執行
- 26. 如何確定SQL作業是否成功執行或不在C#
- 27. 如何確定shell腳本是否以root權限運行?
- 28. 如何確定我的python腳本是否正在運行?
- 29. 如何確定腳本是否爲DML? OCI?
- 30. 如何確定代碼是否在doctest中運行?
完美,謝謝! – slayton