2014-10-04 60 views
1

由于某些原因,我需要在每次执行save函数时显示一条消息。我的程序的所有代码都已经写好了。这就是为什么我要覆盖MATLAB内置函数的原因。如何在执行MATLAB内置函数之前显示消息

这是函数:

function save(varargin) 
    disp(['The file has been saved to ' varargin{1}]) 
    builtin('save',varargin{:}) 
end 

但是,它不工作,MATLAB返回Error using save

我该如何解决这个问题?

回答

2

我假设varargin是字符串的单元数组,如内置函数save
问题是您的save版本不能“知道”调用者函数的变量。您可以使用evalin函数在调用者函数的上下文中评估save
为了做到这一点,您应该将varargin转换为字符串。这样做的一个方法是

function save(varargin) 
    disp(['The file has been saved to ' varargin{1}]) 
    cmd = ['builtin(''save'',' sprintf(repmat('''%s'',',1,nargin),varargin{:}) ]; 
    cmd(end) = ')'; 
    evalin('caller',cmd) 
end 
+1

的'repmat'是多余的位置 - 'sprintf的( '' '%s' 的 '',varargin {:})'会实现的,因为'sprintf'相同的结果会重复格式字符串,直到所有与之匹配的输入被使用。 – Notlikethat 2014-10-04 21:52:01

相关问题