2013-02-21 81 views
0

我有两件事我想用我的matlab函数来做。我有一个函数可以从一系列文件中获取数据。说我有这个文件的结构:从Matlab函数导出数据到全局框架和默认的matlab参数

数1:

我希望能够有一些选择的变量,成为全球访问的功能和函数完成后继续存在。这是说,我有以下功能:

[] = function(directory) 
    b = read(directory) 
    struct c = (do some stuff with b) 
    somehow globalise c 
end 

我明白,你可以有c = function(directory),然后传递变量但是我不希望O此,我宁愿变量c只是坚持在全球范围内。这可以做到吗?

数2:

是否有可能为一个matlab函数有默认参数。让我们从上面看看这个功能。我想要做的是将目录默认为当前目录。例如,如果下面的数据结构存在:

MatlabMainFolder 
    -> MatlabFunctions 
    -> Data 

用户应该能够在数据运行function,它会使用数据directory.But也应该能够达到相同的效果做function('../Data')从MatlabFunctions directy 。这可能吗?

+0

有人想使用'assignin'添加答案,这是一个matlab函数来做到这一点吗?如果您还在此处添加了答案中的信息,我会将该答案标记为正确。 – 2013-02-21 05:22:55

回答

2

第一:

我认为下面应该做一个全局变量来从函数内访问:

[] = function(directory) 
    b = read(directory) 
    global c;   <------ 
    struct tmp = (do some stuff with b) 
    c = tmp;   <------ 
end 

然后,在你想c可用的所有其他文件添加global c,使用前它。尽管如此,我会建议只使用c = function...

如@Ben所示,assignin也可用于将变量分配到不同的工作空间。这样,从一个函数中,任何变量都可以在'base'工作区中分配,该工作区也是所有其他文件可以访问的工作区。在这种情况下:

assignin('base','c',c) 

将创建在基工作区的可变c,具有相同的值作为函数文件c。 (在函数的末尾添加此行)。

二:

你可以做这样的事情:

function(path) 
    if nargin<1 
     path = '../Data'; 
    end 

    % do things with path 
end 

这样,如果function叫不输入,默认路径../Data将被使用,否则,作为输入的路径使用。 nargin将等于作为输入给出的参数的数量。

1

对1)globals以及asignin往往皱起了眉头。你也可以使用persistent

伪代码片段:

function out=fun((directory) 
persistent out 
if isempty(out) 
    fill out 

return out; 

甚至处理在你觉得喜欢去现代案例对象;)

要2):了解doc InputParser - 它比许多更多的工作其他语言 - 但这是可能的。