将Matlab函数中的数据导出到全局框架和默认的matlab参数中

时间:2013-02-21 03:09:57

标签: file matlab directory

我想用matlab函数做两件事。我有一个函数将从一系列文件中获取数据。说我有这个文件结构:

数字1:

我希望函数中的某些选定变量可以全局访问,并在函数完成后保持不变。也就是说我有以下功能:

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

我知道你可以拥有c = function(directory)然后传递一个变量,但是我不想这样做,我宁愿变量c只是在全局范围内存在。可以这样做吗?

数字2:

matlab函数是否可以使用默认参数。让我们从上面采取功能。我想要做的是将目录default作为当前目录。例如,如果存在以下数据结构:

 MatlabMainFolder
    -> MatlabFunctions
    -> Data 

用户应该能够在Data中运行function并且它将使用Data目录。但是也应该能够从MatlabFunctions直接执行function('../Data')以获得相同的效果。这可能吗?

2 个答案:

答案 0 :(得分:2)

首先:

我认为以下内容应该可以在函数中全局访问变量:

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

然后,在使用之前,在global c可用的所有其他文件中添加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)

1)全球和asignin往往不受欢迎。您也可以使用persistent

Pseudocode片段:

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

return out;

甚至可以处理对象,以防你感觉像现代;)

至2):阅读doc InputParser - 这比其他许多语言更有用 - 但这是可能的。