5

如果我有一个包含类定义classdef(我的意思是整个文件,例如通过RunIDE 中的按钮、shell 或 Matlab 命令行。我不是说手动选择要执行的代码。

类似的行为存在于 Java 中的静态main方法和 Python 中通过在类定义之外(可能在if __name__==__main__块内)的代码。

4

2 回答 2

3

最简洁的答案是不”; MATLAB classdef M 文件仅用于定义对象,而不是形成完整的程序。

长答案是,您可能能够从您的 classdef 函数中获得特定行为,例如,如果您重载构造函数以获取一个标志,指定是否“像变量一样行动”或“像程序一样行动”。

例如

classdef myClass
...
methods  
    function self = myClass(varargin)
       if nargin == 1 && strcmpi(varargin{1},'run')
          ..... %run the program
       else
          ..... %make the variable

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

   methods (Static = true)
       function main()
          %enabes: myClass.main()
          ...
       end

IDE 仍然不知道如何处理您的 M 文件以“运行它”,但您可以从命令行或其他 M 文件正确运行它。

最后一句话不是 100% 正确 - 正如 Egon 在下面指出的那样,您可以让 MATLAB 的 IDE 运行该代码 - 使用“运行配置”: http: //www.mathworks.com/help/matlab/matlab_prog/run-functions -in-the-editor.html

于 2012-12-10T15:02:26.240 回答
2

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

  • 您可以创建“运行配置”(作为脚本或特定代码行)。每当您从classdef文件中单击运行按钮(或按运行快捷方式)时,这将运行。最大的缺点是这些运行配置存储在本地,所以当涉及到协作或在多个地方工作时,这是一场噩梦。所以就个人而言,如果您有复杂的运行配置,我建议您编写一个脚本。我的主要被称为testMyClasswhereMyClass当然是您要运行的课程。

  • 如果您不需要复杂的代码,您也可以将所有内容放在对象的构造函数中。如果您检查是否没有通过 传递的参数if nargin == 0 ... end,则每当您“运行”类文件时都应调用该代码。但是,您可以做的事情有些有限,因为如果您不小心,您可能会创建无限循环或正在创建的这些对象的无限链。最后,您将在基础工作区中拥有该对象。

  • 如果您确实需要更复杂的代码或一些在基本工作区中生成一些变量的代码,则可以完成,但成本很高。你的代码最终可能会一团糟,所以我建议不要使用它,除非你有非常好的理由。您可以使用前面的方法和 evil 函数evalinassignin评估和分配基础工作区中的变量。

于 2012-12-10T18:47:37.040 回答