2016-11-16 13 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)関数( "_Inecute組み込み関数fromオーバーロードされたメソッド_")を提供します。 || cardogar - 'load'を使って変数を生み出すことは悪い習慣です。はるかに良いアプローチは 'A = load(...)です。 var = A.someName'であり、mlintと人間の両方をあまり混乱させることはありません。 –

答えて

0

溶液を@ののDev-ILにより、コメントに記載されている

存在に変数を起動しない方が良いですワークスペース内の変数。

だから、これは仕事に上記の簡単な例になるだろう:

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') 
関連する問題