0

.m有没有办法在 MATLAB 中在编译时解析一次的文件中创建代码片段?

例如,假设您有一段代码是模态的,将被执行多次,但它总是使用相同的模式。但是,为了便于移植和阅读代码,我更喜欢在同一个文件中包含所有不同的模式。有点像

if mode==1
  % code of mode 1
elseif mode==2
  % code of mode 2
elseif mode==3
  % code of mode 3
end

但是,如果这个文件被执行一千次,我必须执行这个有条件的一千次。但是对于每次运行,我都会设置模式并且不会更改它。

因此,我在想如果 MATLAB 在类似 C 的行中有一些东西#ifdef,我可以去掉所有其他不会在执行中使用的部分。

4

2 回答 2

3

因为 Matlab 使用即时编译器,所以您提出的建议可能会导致意想不到的结果,即一段代码被编译为一种“模式”,然后留在内存中。下次你运行它时(如果你没有关闭 matlab 并且没有明确地“忘记”这个函数),你仍然会在这个模式下使用它——即使你打算改变它。我不认为它可以做到,这是一件好事......

如果您需要速度,有比删除switch语句更好的方法来实现它 - 这将是我首选的替代方法(再次,如果没有别的,为了可读性)。

switch (mode)
  case 1:
    % code of mode 1
  case 2:
    % code of mode 2
  case 3: 
    % code of mode 3
  otherwise:
    % always trap the unexpected input!!!
end

最后 - 您当然可以创建一个mex使用正确选项有条件地编译的文件。这实际上可以让你完全按照你的要求去做,而且它还有一个额外的优势,那就是比原生 Matlab 代码快得多。您可以使用开关将#define 传递给mex命令(请参阅http://www.mathworks.com/help/matlab/ref/mex.html) - 示例-D

mex -DmyMode=2

网上有大量关于创建 mex 文件的资料。我想你能找到它。

于 2013-04-19T04:43:17.237 回答
3

我认为您可以使用策略模式优雅地解决您的问题

考虑在你的代码中设置一个函数句柄——如果你是面向对象的,甚至可以制作策略对象。

于 2013-04-19T08:09:31.603 回答