2016-11-16 109 views
0

我想知道如何在運行m文件時用Matlab R2015a中的工作空間中定義的變量覆蓋內部函數。Matlab:如何在工作空間中用變量覆蓋內部函數

我的意思是,如果我定義:

function test 
fun1 
clear input 
load test 
plot(input) 
return 

function fun1 
input=1:10; 
save('test.mat','input') 
return 

,我跑的測試,然後我得到:

Error using input 
Not enough input arguments. 

Error in test (line 8) 
plot(input) 

Matlab的正在輸入作爲其內置的功能。

你知道如何解決這個問題嗎(不改變變量名稱)?

謝謝。

+0

你不應該覆蓋內置的功能。 (爲了避免這種錯誤) – obchardon

+0

但是,如果您創建一個變量或一個新的.m文件作爲內置函數的完全相同的名稱,則此內置函數將被「覆蓋」。 – obchardon

+0

@obchardon我不同意。如果你知道自己在做什麼,那麼這樣做絕對沒有問題 - 例如,爲自定義類('plus()'等)重載操作符時。 MATLAB甚至提供['builtin'](https://www.mathworks.com/help/matlab/ref/builtin.html)函數(「_Execute內置函數來自重載方法_」),以便在需要時調用原始版本。 || cardogar - 使用'load'「錯誤地生成變量」是個不好的做法。一個更好的方法是'A = load(...); var = A.someName'這對mlint和人類來說都不那麼令人困惑。 –

回答

0

該解決方案在評論中給出的@開發金正日

最好不要產卵變數納入存在工作區中的變量。

所以這會使簡單的例子上述工作:

A=load('test.mat'); 
input=A.input 
0

指定確切的文件名,包含擴展名。 並更好地使用將接受輸入的變量。

function test 
    fun1 
    clear input 
    data=load('test.mat'); 
    plot(data.input) 
    return 
end 
function fun1 
    input=1:10; 
    save('test.mat','input') 
    return 
end 

如果你想使用相同的數據結構,你可以使用:

data.input=1:10; 
save('test.mat','-struct','data')