如何在单个matlab文件中创建多个函数

时间:2015-10-08 12:19:44

标签: matlab

我有一个C ++文件,在单个.cpp文件中有一些功能,例如

 int func1(x)
 {
  return 1;
 }
 void func2(x)
 {
  return 1;
 }
 int func3(x)
 {
  return 1;
 }

现在,我想在一个matlab文件中编写所有上述函数。 (如果我为每个函数添加了一个自己的matlab文件,我的文件夹会变得非常庞大。)你能否在MATLAB中向我建议一个简单明了的方法?

目前,我这样做:

function f = perform(func, x);
    switch(func)
        case 'f1'
            f = func1(x);
        case 'f2'
            f = func2(x);
        case 'f3'
            f = func3(x);
        otherwise
            error(['Unknown function ', func]);
    end

3 个答案:

答案 0 :(得分:2)

查看localnested个功能。本地函数与其他编程语言语法最为相似。

本地功能,例如:

function f = perform(func, x);
    switch(func)
        case 'f1'
            f = func1(x);
        case 'f2'
            f = func2(x);
        case 'f3'
            f = func3(x);
        otherwise
            error(['Unknown function ', func]);
    end
end

function func1(x)
disp(sprintf('func1: %u\n', x))
end

function func2(x)
disp(sprintf('func2: %u\n', x))
end

function func3(x)
disp(sprintf('func3: %u\n', x))
end

请注意,本地或嵌套函数都不可从外部调用。

答案 1 :(得分:2)

您可以组织包中的函数,请参阅Packages Create Namespaces,每个cpp文件一个

+module1
    func1.m
    func2.m
+module2
    func1.m

然后您可以将这些功能称为

module1.func1(x)
module2.func1(x)

答案 2 :(得分:1)

如果设置了一堆函数句柄,可以在外部调用本地函数。不是我推荐这个,但我从同事那里得到了这个设置。这段代码并不健全 - 几乎可以肯定它会失败或做坏事。

% code to create callable handles for all subfuncs in some file
%
% first, in the file containing subfuncs:
% this is the "setup" main func 
function [p]=To_Call_Subfuncs()
[p,n]=update_function_list();
end

% this creates all the handles by pseudogrepping the subfunction names
function [p,function_names]=update_function_list()
function_names={};
% making p empty allows one to call, e.g.  funclist.firstfunc() 
p=[];   
f=fopen([mfilename() '.m'],'r');
while ~feof(f),
  line=fgetl(f);
  s= strfind( strtrim(line),'function ') ;
  if length(s) && s(1)==1,
    s0=find(line=='=');
    s1=find(line=='(');
    if length(s0)==0,s0=9;end;
    if(length(s1)==0), s1 = numel(line)+1;end; %to handle the -1 later on
    function_name= strtrim( [line(s0(1)+1:s1(1)-1)] );
    if length(function_name),
      function_names{end+1}=function_name;
      eval( sprintf('p.%s=@%s;', function_name, function_name) );
    end;
  end;
end;
end
%
%follow this with the  functions we actually want to call
function a = firstfunc(x)
a=x;
end

function b = secondfunc(x)
b = x^2;
end

function cnot = thirdfunc
cnot= 17;
end

%
%
% next, in the m-file where some function is calling these subfuncs,
% set up the handles with:
%  run(fullfile(dirpath,'the_mfile.m'))
%  the_mfile=ans; 
% because I don't  think run() returns a value --
%%    only the called mfile does.
% now you can call the_mfile.firstfunc()   and so on.