如果我有一个包含类定义(classdef
)的Matlab源文件(m文件),是否有任何方法可以指定在运行m-时要执行的特定代码集文件?我指的是整个文件,例如通过IDE中的Run
按钮,来自shell或来自Matlab命令行。我并不是指手动选择要执行的代码。
Java中使用静态main
方法存在类似的行为,而在Python中则存在类定义之外的代码(可能位于if __name__==__main__
块内)。
答案 0 :(得分:3)
简短的回答是“不”; MATLAB classdef M文件只是用于定义对象,而不是形成完整的程序。
很长的答案是你可能能够从你的classdef函数中获得特定的行为,例如,你重载构造函数以获取一个标志,指定是否“充当变量”或“像程序一样行事” ”
e.g。
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
答案 1 :(得分:2)
有几种方法可以做到这一点:
您可以创建“run configuration”(作为脚本或特定代码行)。只要您从classdef
文件中单击运行按钮(或按下运行快捷方式),就会运行此选项。最大的缺点是这些运行配置存储在本地,因此在协作或在多个地方工作时,这是一场噩梦。所以个人而言,如果你有一个复杂的运行配置,我建议你写一个脚本。我的大部分名为testMyClass
,其中MyClass
当然是你要经营的班级。
如果您不需要复杂的代码,也可以将所有内容放在对象的构造函数中。如果检查是否没有与if nargin == 0 ... end
一起传递的参数,则只要您运行该类文件,就应该调用该段代码。但是,您可以做的事情有些局限,因为如果不小心,可以创建无限循环或创建这些对象的无限链。最后,您将只拥有基础工作区中的对象。
如果你确实需要更复杂的代码或一些在基础工作区内创建一些变量的代码,那么它可以实现,但代价很高。你的代码可能会完全混乱,所以我建议不要使用它,除非你有一个非常好的理由。您可以使用上一个方法和邪恶函数evalin
和assignin
来评估和分配基础工作区中的变量。