4

このサンプル関数を次のように保存しますtest_func.m

function test_func
load test.mat
whos
alpha

次のサンプルスクリプトを実行します。

alpha = 3;
save test.mat
test_func

これが私が得る出力です:

  Name       Size            Bytes  Class     Attributes

  alpha      1x1                 8  double              

??? Error using ==> alpha at 40
Not enough input arguments.

Error in ==> test_func at 4
alpha

の出力はwhos、変数が関数のローカルワークスペースにロードされていることを示しています。の4行目にブレークポイントを設定してtest_func入力することもできalphaますが、正しい結果が得られますが、デバッガーでステップを進めるとすぐに失敗します。関数alphaがローカル変数をマスクしているため、理由がわかりません。 。

のコンテンツtest_func

p = load('test.mat');
p.alpha

正常に動作しますが、それは私がやろうとしていることではありません。関数のローカルワークスペース内に直接変数をロードしたいと思います。

私にはバグのように見えますが(私はMatlab R2011aを使用しています)、それが機能である場合、それを説明し、回避策を見つけるのに役立ちますか?

4

1 に答える 1

3

ええ、あなたはこれがバグであるということは正しいかもしれません。次の作品があるので、本当に奇妙に見えます

function test_func
load('test.mat','alpha');
whos
alpha

役立つもう1つのことは、loadを呼び出す前に変数を初期化することです。

function test_func
alpha = 0;
load('test.mat');
whos
alpha
于 2012-09-30T07:53:20.880 に答える