2011-07-13 25 views
13

私はMatlabにいくつかの変数を持つ関数を持っています。私はvariable_namesを印刷する必要があります(例外の場合など)。私はinputname関数を認識していますが、input_argumentsに対してのみ機能します。Matlabに変数名を表示

mat = [ 1 2 ; 3 4 ] ; 

% disp(['Error in var: ' ??(a)]) 
% desired ouput: Error in var: mat  (and NOT 1 2 ; 3 4!) 

ありがとうございます!

+0

'(a)は'ように何を想定していますか? – gnovice

+1

@gnovice:私は彼が 'a'の代わりに' mat'を言うことを意味したと思う。 – Amro

+0

好奇心の外に、この運動のユースケースは何ですか?私が意味することは、変数名が実際にこの状態で知られているということです。 'disp( 'var:mat')'のエラーをタイプするのを防ぐには?これを批判的ではなく、本物の関心の問題とみなしてください。 – patrik

答えて

13

MATLABは、基本的にあなたがそれを行うことはできませんここでは簡単な関数test.mを使用した例です。しかし、あなたはそのような出力を作成するには、あなたの痛みを緩和するためのヘルパー関数を書くことができます:

、あなたの場合にはそうのように呼び出すことができます
function disp_msg_var(msg, v) 
    disp([msg inputname(2)]); 
end 

disp_msg_var('Error in: ', a); 

あなたはトピックに関するより多くの議論を読むことができますMathworks forum

また、すべての現在の変数を値で表示するには、who関数を使用できますが、これはあなたが提示した問題ではありません。

1

関数に存在する変数を出力する場合は、関数WHOを使用できます。あなたは次のような出力が得られますこれを実行

function test 
    a = 1; 
    b = 2; 
    varNames = who(); 
    disp(sprintf('%s ','Variables are:',varNames{:})); 
    c = 3; 
    d = 4; 
    varNames = who(); 
    disp(sprintf('%s ','Variables are:',varNames{:})); 
end 

>> test 
Variables are: a b 
Variables are: a b c d varNames 
+0

-1 OPが求めているものではない – Amro

+0

@Amro:そうだと思います。 "variable_name ** s **(例外の場合など)を出力する必要があります。"例外が発生した後に存在する変数をリストしたいと思うように私に聞こえます。 OPがどの変数が例外を引き起こしたかを既に知っていたなら、彼らはすでにその名前を知っていてどこからでも取得する必要がないので、他の人が行った解釈はあまり意味がありません。 – gnovice

+1

私はOPのリクエストがちょっと変わっていることに同意します(文字列として変数名を取得したい場合は、コードを入力しているときに既にそれを知っています)。私が考えることができる唯一のユースケースは、エラー報告またはデバッグを簡略化することです。おそらく、これはある種の反射能力とみなすことができます... – Amro

16
[email protected](x) inputname(1); 
disp(['Error in var: ' varname(mat)]) 
+0

+1このソリューションの1行バージョンを追加しました – Amro

6
私はミックス(ワンライナー)に、別のソリューションを追加している

function myFunction() 
    mat = [1 2; 3 4]; 
    disp(['Error in var: ' feval(@(x)inputname(1),mat)]) 
end 

出力:

Error in var: mat 
関連する問題