MATLAB是否具有以下功能:获取直接包含其他.m
文件的源代码,并输出合并所有包含文件所产生的源?
例如,考虑script_one.m
:
% some matlab code
script_two
% more matlab code
我想以编程方式生成.m
文件,该文件可能会将script_two.m
的内容复制并粘贴到script_one.m
中。这对于普通的脚本工具很难做到,因为我基本上需要一个MATLAB符号表来确定哪些标识符对应于可源脚本。我非常怀疑Matlab提供了这样的设施,但我对其他想法持开放态度。
"用例"需要修改源(使用sed
),但需要将更改传播到任何依赖脚本,例如script_two.m
。由于我没有依赖脚本的列表,因此只能通过手动浏览源来识别它们(并且需要在大量动态创建的文件上完成)。
用例的一些细节:
使用动态创建的头文件(例如matlab [args] -r 'some definitions; script_two; script_three; others; main_script();quit()'
)调用主脚本(script_one)。这是在机器A上运行的;对于负载平衡,可能需要在机器B,C等上运行,这些机器在某些时候挂载A的文件系统。包含的.m
文件中的任何路径(主要用作标题)都需要基本上是chrooted来处理新主机。最简单的解决方案是预处理为机器A生成的代码,使用sed
替换新主机(B,C等)的所有路径。它当然可以通过在matlab中进行更改来解决,但就简约性而言,sed one-liner是一个更具吸引力的解决方案。
答案 0 :(得分:1)
一般来说,不,这在MATLAB中是不可能的。您想要的是在执行前需要编译步骤的语言所共有的语言功能,但这不是MATLAB的语言模型,因此,它只能通过hacky古怪的语言滥用来实现。
可以想象,您可以创建一个主脚本,负责协调新源文件的生成,并通过eval()
执行它们:
[o,e] = system('<your sed command here, to generate script_one.m>');
% ... some more code
% execute newly generated M-file
[outputs] = eval('script_one');
但我希望你能看到并同意这很快变成意大利面 。
执行更改上下文和参数的脚本正是function语言功能的发明:)