我在Matlab写了一些程序。我在 .m 文件中执行此操作。现在它有300多个代码串,因此阅读起来不太舒服。我的想法是像在C ++中一样使用它:我想在这个文件的末尾创建本地函数并将代码片段放入其中。它很容易阅读,它将由一些逻辑部分组成。
但是我面对的事实是只能在其他功能的主体中创建本地功能!所以我不能创造这个:
x = 1;
y = 2;
z = myLocalFnc(x,y);
function res = myLocalFnc (a,b)
res = a.*b;
end
这会产生错误:
在此上下文中不允许使用函数定义。
我可以通过将整个代码包含在一个函数中来实现:
function myBigFcn
x = 1;
y = 2;
z = myLocalFnc(x,y);
end
function res = myLocalFnc (a,b)
res = a.*b;
end
但是现在所有的变量都变成了本地变量而且它没有返回工作区。 每当我创建一些变量时,修改此函数的输入/输出 - 我不认为我走得正确... Here描述了这种方法的优点和缺点。
我知道我可以在额外的.m文件中创建函数,保存并在我的脚本中使用 - 好的,但是很多都是单操作,我不想创建这么多新文件。
我的问题是还有其他任何代码组织方法吗?
答案 0 :(得分:2)
如果你真的希望你的主要内容是一个脚本(我不推荐这个),你可以将所有其他功能放在单独的.m
文件中,并从脚本中调用它们。
正如您所指出的,另一个选项是将“main”部分的全部内容放入代码顶部的函数中。您可以通过输出参数返回所有必需的值,或者如果以后需要访问它们,请将它们保存到.mat文件中。
<强>更新强>
如果您想要一种简单的方法将代码转换为函数。您可以在函数末尾自动将所有变量轻松保存到结构中,并返回此结构。
function output = my_script_that_is_now_a_function(inputs)
% Do stuff
% Now save all variables in a struct and return it
tmpfile = tempname;
save(tmpfile);
output = load(tmpfile);
delete(tmpfile);
end
答案 1 :(得分:1)
如果您不介意在本地保存文件,一个选项是将代码重组为多个函数(全部在同一文件中),并将必要的变量作为输出传递。然后你有一个简短的脚本调用这个函数并创建必要的变量。
例如,假设您的脚本看起来像这样
numPoints = 5;
a = randn(numPoints);
b = sin(a);
c = a + b;
您可以将其重组为
function data = main()
data.numPoints = 5;
data.a = getA(data.numPoints);
data.b = getB(data.a);
data.c = getC(data.a, data.b);
function a = getA(numPoints)
a = randn(numPoints);
function b = getB(a)
b = sin(a);
function c = getC(a, b)
c = a + b;
并创建一个类似于
的脚本文件data = main();
然后你有一个名为data
的结构,它包含你所有的变量。如果你真的希望它们包含在单独的变量中(即不在结构中),那么有几种方法可以做到。一种是手动解压缩,
a = data.a;
b = data.b;
c = data.c;
clear data;
另一种方法是保存结构,然后重新加载它(这样做的好处是保留用于此功能的工作区的副本,供以后分析)。
save('workspace.mat', '-struct', 'data');
load('workspace.mat');