gpt4 book ai didi

matlab - 是否可以在 MATLAB 中为每个文件定义多个函数,并从该文件外部访问它们?

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:00 24 4
gpt4 key购买 nike

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

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

如果可以在一个文件中放置多个函数,是否有任何限制?例如,可以从文件外部访问文件中的所有函数,还是只访问与文件同名的函数?

注意:我使用的是 MATLAB 版本 R2007b。

最佳答案

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

m 文件中的所有后续函数,称为 local functions (或旧术语中的“子函数”),只能由该 m 文件中的主函数和其他本地函数调用。其他 m 文件中的函数不能调用它们。从 R2016b 开始,您可以 add local functions to scripts同样,尽管作用域行为仍然相同(即它们只能从脚本中调用)。

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

更多值得深思...

有一些方法可以绕过上面概述的正常函数作用域行为,例如传递 function handles作为 SCFrench 的答案中提到的输出参数和 Jonas (从 R2013b 开始, localfunctions 函数促进了这一点)。但是,我不建议养成使用这些技巧的习惯,因为组织函数和文件可能有更好的选择。

例如,假设您有一个主函数 A在 m 文件中 A.m ,以及局部函数 D , E , 和 F .现在假设您有两个其他相关函数 BC在 m 文件中 B.mC.m ,分别表示您还希望能够调用 D , E , 和 F .以下是您的一些选择:

  • D , E , 和 F每个都在自己单独的 m 文件中,允许任何其他函数调用它们。缺点是这些函数的范围很大,并且不仅限于A。 , B , 和 C ,但好处是这很简单。
  • 创建 defineMyFunctions带有 D 的 m 文件(如 Jonas 的示例) , E , 和 F作为局部函数和一个简单地返回函数句柄给它们的主函数。这使您可以保留 D , E , 和 F在同一个文件中,但它不会对这些函数的范围做任何事情,因为任何可以调用 defineMyFunctions 的函数可以调用它们。然后,您还必须担心将函数句柄作为参数传递,以确保将它们放在需要的地方。
  • 复制 D , EF进入 B.mC.m作为局部函数。这将它们的使用范围限制在 A , B , 和 C ,但是使代码的更新和维护成为一场噩梦,因为您在不同的地方拥有相同代码的三个副本。
  • 使用private functions ! 如果您有 A , B , 和 C在同一目录下,您可以创建一个名为 private 的子目录并放置 D , E , 和 F在那里,每个都作为一个单独的 m 文件。这限制了它们的范围,因此它们只能被上面目录中的函数调用(即 ABC )并将它们放在同一个地方(但仍然是不同的 m 文件):
    myDirectory/
    A.m
    B.m
    C.m
    private/
    D.m
    E.m
    F.m

  • 所有这些都超出了您的问题范围,并且可能比您需要的更详细,但我认为触及组织所有 m 文件的更普遍问题可能会很好。 ;)

    关于matlab - 是否可以在 MATLAB 中为每个文件定义多个函数,并从该文件外部访问它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3569933/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com