为matlabs保存函数编写包装器

时间:2017-07-28 10:08:01

标签: matlab

我想为matlab的save函数编写一个包装器,其中包含预定义的选项(在我的情况下预定义version以允许保存大文件),即类似这样的东西

save('parameters.mat', 'some', 'parameters', 'here', '-v.3');

应该变成这个

save_large('parameters.mat', 'some', 'parameters', 'here');

其中save_largesave的包装器,version设置为'-v7.3'

function [  ] = save_large( filename, varargin )
%varargin to allow for multiple variable storing?

%what to write here to save all variables (declared as chars) stored in
%the workspace where 'save_large' was called with version set to '-v7.3'?

end

1 个答案:

答案 0 :(得分:2)

由于变量不会存在于函数Array ( [0] => 7814 ) 的范围内,因此您必须使用save_largeevalin工作空间获取变量。

使用"caller"我们还可以确保调用者工作区中的变量存在

要在try文件中获取正确的变量名,我们可以使用(不鼓励的).mat函数,或者使用以下方法将所有变量分配给结构,然后使用eval中的-struct标记。

save

实施例

function save_large(filename, varargin)
    % Set up struct for saving
    savestruct = struct();
    for n = 1:numel(varargin)
        % Test if variable exists in caller workspace
        % Do this by trying to assign to struct
        % Use parentheses for creating field equal to string from varargin 
        try savestruct.(varargin{n}) = evalin('caller', varargin{n});
            % Successful assignment to struct, no action needed
        catch
            warning(['Could not find variable: ', varargin{n}]);
        end
    end
    save(filename, '-struct', 'savestruct', '-v7.3');
end