也许这是一个基本问题但是我走了。我希望有一个.m,其中包含其他脚本和函数可以访问的所有函数。
我尝试用一个包含所有函数的脚本,并在其他函数代码中调用它。
我得到了错误。你能解释一下我该如何解决这个问题?
我尝试这个,这没有给我任何错误,做了我想做的事,仍然,这是一个好方法吗?有什么建议吗?
function PruebasLlamaFuncion
funcionFEM=@PruebasTodasFunciones;
a=funcionFEM('OVERPOWER',1,5)
b=funcionFEM('POWEROVERWELMING',2)
end
...
function a=f(nombre,varargin)
f=str2func(nombre)
a=f(varargin{1:end});
end
function d=OVERPOWER(J,c)
d=J*c;
end
function e=POWEROVERWELMING(J)
e=J;
end
答案 0 :(得分:0)
我认为你误会了什么。脚本用于按顺序调用一系列函数/其他脚本。如果您只想在其他代码中访问您的函数,您只需要确保它们在路径上。你永远不需要一个“包含所有功能的脚本”。您可能会想到local functions,但这些与您想要的完全相反(它们不能从定义它们的函数外部或同一文件中的其他本地函数调用)。
e.g。如果你的路径上有Function1
和Function2
,你可以写一个这样的脚本,或许作为如何使用这两个函数的演示:
a = 0;
b = 1;
c = 2;
d = 'Unicorns';
Result=Function1(a,b,c);
Result2=Function2(b,d);
它不会也不应该包含任何函数定义。如果您的脚本找不到这些函数,请使用addpath
(see docs)将这些函数文件所在的文件夹放入您的路径中。 m文件应该具有相同的名称,例如以下内容需要放在名为myfunc.m
function result = myfunc(a,b,c)
即使该路径不在您的路径上,也可以调用工作目录中的函数。
答案 1 :(得分:0)
与许多其他语言不同,Matlab允许单个文件只包含一个对系统其余部分可见的主要功能。主要功能是第一个功能。 (Documentation)
在主函数体之后定义的任何函数都称为local functions。这些函数每个都创建自己独立的工作区(范围),并且可以相互调用,当然也可以由主函数调用。
在主函数体中 中定义的任何函数都称为nested functions。这些函数具有自己的工作空间,但也能够访问和更改其父函数under certain conditions的变量。同一嵌套级别的嵌套函数可以相互调用和本地函数,但本地函数不能调用嵌套函数,因为它们超出了范围。
根据您的使用方式,您可以选择多种选项。 如果有太多选择但希望详尽无遗的风险,我会把清单从我先做的事情到我最后做的事情。 对于大多数事情,我建议1或2。 其他选项更多用于创建库/ API,但我将它们包含在内以显示可以完成的内容。
在Matlab路径或当前工作目录中的单独m文件中定义Function1和Function2,以便正常调用它们。
将您工作的主体(调用函数的主体)包装在函数本身中,并将其他函数定义为本地函数或嵌套函数。例如:
function output = main(a,b,c)
Result=Function1(a,b,c);
Result2=Function2(b,d);
...
% You can define Function1 and Function2 here for nested functions
end
% Or you can define Function1 and Function2 here for local functions
function Functions = GetFunctions()
Functions.F1 = @(a,b,c) Function1(a,b,c);
Functions.F2 = @(a,b) Function2(a,b);
% You can define Function1 and Function2 here for nested functions
end
% Or you can define Function1 and Function2 here for local functions
function Functions = GetFunctions()
Functions = localfunctions(); % R2013b+ only
end
% Define Function1 and Function2 here for local functions
classdef Functions
methods(Static)
% Define Function1 and Function2 here and call them just like the struct above.
end
end
我希望这有意义并希望有所帮助。