0

我想用我的 matlab 函数做两件事。我有一个函数可以从一系列文件中获取数据。假设我有这个文件结构:

1号:

我希望能够使函数中的一些选定变量成为全局可访问的,并在函数完成后持续存在。也就是说我有以下功能:

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

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

2号:

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

 MatlabMainFolder
    -> MatlabFunctions
    -> Data 

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

4

2 回答 2

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将等于作为输入给出的参数的数量。

于 2013-02-21T03:54:42.700 回答
1

To 1) globals 和 asignin 经常不受欢迎。你也可以使用persistent

伪代码片段:

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

return out;

或者甚至处理物品以防您想变得现代;)

To 2): 阅读doc InputParser- 它比许多其他语言的工作量更大 - 但它是可能的。

于 2013-02-21T10:09:49.140 回答