Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop Matlab有类似于主方法的东西吗?_Oop_Matlab_Main - Fatal编程技术网

Oop Matlab有类似于主方法的东西吗?

Oop Matlab有类似于主方法的东西吗?,oop,matlab,main,Oop,Matlab,Main,如果我有一个包含类定义(classdef)的单个Matlab源文件(m-file),是否有任何方法可以指定运行m-file时要执行的特定代码集?我指的是整个文件,例如通过IDE中的Run按钮、shell或Matlab命令行。我不是指手动选择要执行的代码 Java中的静态main方法和Python中的类似行为都存在,它们的代码在类定义之外(如果name\uuuuuuu==\uuuuuu main\uuuu块,则可能在中);MATLAB classdef M文件仅用于定义对象,而不是形成完整的程序

如果我有一个包含类定义(
classdef
)的单个Matlab源文件(m-file),是否有任何方法可以指定运行m-file时要执行的特定代码集?我指的是整个文件,例如通过IDE中的
Run
按钮、shell或Matlab命令行。我不是指手动选择要执行的代码

Java中的静态
main
方法和Python中的类似行为都存在,它们的代码在类定义之外(如果name\uuuuuuu==\uuuuuu main\uuuu块,则可能在
中);MATLAB classdef M文件仅用于定义对象,而不是形成完整的程序

答案很长,例如,如果您重载构造函数以使用一个标志来指定是“像变量一样工作”还是“像程序一样工作”,那么您可能能够从classdef函数中获得特定的行为

e、 g

或者,您可以创建一个名为main的静态方法:

   methods (Static = true)
       function main()
          %enabes: myClass.main()
          ...
       end
IDE仍然不知道如何处理M文件来“运行它”,但您可以从命令行或其他M文件正确运行它


最后一句话并非100%正确-正如Egon在下面指出的,您可以让MATLAB的IDE运行该代码-使用“运行配置”:

有几种方法可以做到这一点:

  • 您可以创建“”(作为脚本或特定代码行)。无论何时从
    classdef
    文件中单击运行按钮(或按运行快捷方式),都将运行该命令。最大的缺点是这些运行配置存储在本地,因此当涉及到协作或在多个地方工作时,这是一场噩梦。所以就我个人而言,如果您有一个复杂的运行配置,我建议您编写一个脚本。我的类通常被称为
    testMyClass
    ,其中
    MyClass
    当然是您想要运行的类

  • 如果不需要复杂的代码,还可以将所有内容都放在对象的构造函数中。如果检查nargin==0时是否没有传递带有
    的参数。。。结束
    ,无论何时“运行”类文件,都应该调用这段代码。然而,您所能做的有些有限,因为如果您不小心,您可能会创建无限循环或这些对象的无限链。最后,您的基本工作区中将只有对象

  • 如果您确实需要更复杂的代码,或者需要在基本工作区中生成一些变量的代码,那么这是可以实现的,但代价很高。您的代码可能会变得一团糟,所以我建议不要使用它,除非您有非常好的理由。您可以使用前面的方法和函数
    evalin
    assignin
    对基本工作区中的变量进行求值和赋值


不太熟悉java,但如果你在Matlab中有一段代码,你可以通过选择该位并按
f9
@DennisJaheruddin true来运行它,但这不是我想要的。我改进了这个问题,以便更具体地解释。@gerrit:等等……我开始明白了。您希望“运行”文件的行为与创建类实例的行为不同?@gerrit:您希望如何处理?您能简要描述一下在m文件中使用类似于
\uuu main\uuuu
的构造希望实现什么吗?假设您有一个名为
runMe.m
的文件,并且在运行该文件后,您希望运行另一个名为
runMeToo.m
的文件。如果您多次这样做,调用这两个文件可能会很烦人,因此您可以创建一个名为
runThem.m
的脚本来调用这两个文件,也可以在屏幕顶部创建一个快捷按钮。当然,您也可以编辑一个文件来调用另一个文件。
   methods (Static = true)
       function main()
          %enabes: myClass.main()
          ...
       end