1. 程式人生 > >錯誤: 此上下文中不允許函數定義。

錯誤: 此上下文中不允許函數定義。

atl 利用 其他 沒有 了解 相同 除了 運行機制 參考

1 為了搞清這個問題,我們先來了解一下matlab編譯運行代碼的幾種方式。

  • 在腳本編輯器中編寫,全選後右鍵執行所選內容。使用這種方式編譯運行,無非就是將選中的代碼一行一行放到命令行中運行,這種方式,便於程序的調試,也是我常用的方式。
  • 在編輯器中編寫完成後,摁F5鍵保存運行。這種運行方式,其實上相當於在命令行窗口中輸入文件名運行,所以要先保存。這種方式適用於不帶輸入參數的程序以及運行。將文件拖入命令行,也能達到相同的效果。
  • 直接在命令行窗口輸入文件名(不是函數的文件,或傳入參數沒有用到或者函數體內定義了的函數)或函數名(最好與文件同名)及其傳入參數運行。這種運行方式的機理同上一個。

後兩種運行方式最大的優點就是可在單文件中定義供自身調用的函數,而無需另外編寫m文件保存。最大的缺點是不利於單行的調試。

2 知道了程序的幾個簡單的運行方式後,我們來簡單了解一下matlab程序運行機制。

  • 對於逐行解析運行的方式,毋庸多說,當在文中碰到function定義的函數時,會告訴你“此上下文中不允許函數定義”。這時候,你需要將一個一個函數單獨寫成m文件。
  • 對於命令行調用文件的運行方式,matlab會將文件進行識別成兩類文件,非函數文件和函數文件。當文件開頭就開始定義函數時,matlab將此文件識別為函數,那麽文中的第一個函數將被視為該文件對應的函數(主體函數,優先運行),而文中定義的其他函數,此時視為可在文中互相調用的附屬函數。這個“函數調用文中函數”機制允許我們在文中定義函數。當文件開頭不是以“function”定義的函數時,文件被識別做非函數,則逐行解析運行,若下文有函數定義,則報錯。

註:簡而言之,只有在定義函數文件時,才能在本文中調用其他文件,而不需另外的m文件來定義函數。

值得一提的是,選中逐行運行的方式除了有便於調試的優點,還避開的調用法運行時文件一定要英文名的缺點,並且運行時不需要先保存文件,十分方便。習慣性這樣操作,平時編寫程序還是多拆幾個m函數文件,最後為了美觀整合的時候,可以利用函數可調用函數的機制,整合成一個文件。但常用到的函數,最好能單獨出來,因為函數文件中的附屬函數,只能在該函數文件中調用。

參考:https://blog.csdn.net/lusongno1/article/details/54018723

錯誤: 此上下文中不允許函數定義。