2014-10-04 59 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

相關問題