2016-11-16 108 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')