我在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!)
謝謝!
我在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!)
謝謝!
Matlab的基本上是不會讓你這樣做。然而,你可以寫一個輔助函數來減輕你的痛苦在創造這樣的輸出:
function disp_msg_var(msg, v)
disp([msg inputname(2)]);
end
,你可以調用像這樣在您的情況:
disp_msg_var('Error in: ', a);
你可以閱讀的話題更多的討論在Mathworks forum
此外,要列出所有具有值的當前變量,您可以使用who
函數,但這不是您提出的問題。
如果要打印出函數中存在的變量,可以使用函數WHO。下面是使用一個簡單的函數test.m
一個例子:
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
我加入另一種解決方案混合(一個班輪):
function myFunction()
mat = [1 2; 3 4];
disp(['Error in var: ' feval(@(x)inputname(1),mat)])
end
,輸出:
Error in var: mat
什麼是'(一)'應該是什麼? – gnovice
@gnovice:我認爲他的意思是說'mat'而不是'a' – Amro
只是出於好奇,這個練習的用例是什麼?我的意思是變量名實際上在這種狀態下是已知的。什麼可以防止鍵入'disp('var in:'錯誤')'?不要把它當作批評,而是作爲一個真正感興趣的問題。 – patrik