Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 是否可以在MATLAB中为每个文件定义多个功能,并从该文件外部访问它们?

在我攻读EE的本科学位时,MATLAB要求每个函数都必须在其自己的文件中定义,即使它是单行的也是如此。

我现在正在攻读研究生学位,所以我必须在MATLAB中编写一个项目。仍然需要更新版本的MATLAB吗?

如果可以在一个文件中放置多个功能,是否对此有任何限制?例如,可以从文件外部访问文件中的所有功能,还是仅从名称相同的功能访问文件?

注意:我正在使用MATLAB版本R2007b。



回答:

m文件中的第一个函数(即main函数 )在调用该m文件时被调用。 不需要 main函数具有与m文件相同的名称,但为清楚起见,它应具有 。当函数和文件名不同时,必须使用文件名来调用主函数。

m文件中的所有后续函数(称为本地函数 (或旧术语中的“子函数”))只能由该m文件中的main函数和其他本地函数调用。其他m文件中的函数无法调用它们。从R2016b开始,您还可以向脚本中添加本地功能 ,尽管作用域范围仍然相同(即只能在脚本中调用它们)。

此外,您还可以其他函数中声明函数。这些称为嵌套函数 ,并且只能从它们嵌套的函数内部调用它们。它们还可以访问嵌套它们的函数中的变量,这使它们非常有用,尽管使用起来有些棘手。

更多值得深思的...

围绕上面概述的常规函数作用域行为,有一些方法,例如将函数句柄作为输出参数传递,如SCFrenchJonas的答案中所述(从R2013b开始, localfunctions函数localfunctions函数提供了localfunctions )。但是,我不建议您养成使用这种技巧的习惯,因为组织功能和文件可能有更好的选择。

例如,假设您在m文件Am具有一个主要函数A ,以及局部函数D , E和F现在,假设您在m文件Bm和Cm中分别具有其他两个相关函数B和C ,您还希望能够调用D , E和F这里有一些选项:
  • 将D , E和F分别放置在各自独立的m文件中,从而允许其他任何函数调用它们。不利之处在于这些函数的范围很大,不仅限于A , B和C ,但不利之处在于这很简单。
  • 使用D , E和F作为局部函数,以及一个仅向其返回函数句柄的主函数,创建一个defineMyFunctions m文件(类似于Jonas的示例)。这使您可以将D , E和F保留在同一个文件中,但是对于这些函数的作用域不做任何事情,因为任何可以调用defineMyFunctions函数都可以调用它们。然后,您还必须担心将函数句柄作为参数传递,以确保将它们放在需要的位置。
  • 将D , E和F复制为Bm和Cm作为本地函数。这将它们的使用范围限制为A , B和C ,但是由于您在不同位置具有相同代码的三个副本,因此使代码的更新和维护成为噩梦。
  • 使用私有功能如果在同一目录中有A , B和C ,则可以创建一个名为private的子目录,并将D , E和F放在其中,每个子目录都作为单独的m文件。这限制了它们的范围,因此它们只能由紧靠其上的目录中的函数(即A , B和C )调用,并将它们放在同一位置(但仍是不同的m文件):

    myDirectory/ Am Bm Cm private/ Dm Em Fm
所有这一切都超出了您的问题范围,并且可能比您需要的更详细,但是我认为最好涉及组织所有m文件的更普遍的关注。 ;)



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:15


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.