вывести имя переменной в Matlab - PullRequest
14 голосов
/ 13 июля 2011

У меня есть функция в Matlab, в которой есть некоторые переменные. Мне нужно распечатать имя переменной (в случае исключения и т. Д.). Мне известна функция inputname, но она работает только для input_arguments.

mat = [ 1 2 ; 3 4 ] ;

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

Спасибо!

Ответы [ 4 ]

17 голосов
/ 13 июля 2011
varname=@(x) inputname(1);
disp(['Error in var: ' varname(mat)])
14 голосов
/ 13 июля 2011

Матлаб, по сути, не позволяет вам сделать это.Тем не менее, вы можете написать вспомогательную функцию, чтобы облегчить вашу боль при создании вывода:

function disp_msg_var(msg, v)
  disp([msg inputname(2)]);
end

, который вы можете назвать так в вашем случае:

disp_msg_var('Error in: ', a);

Вы можете прочитать большеобсуждение темы на форуме Mathworks

Кроме того, для перечисления всех текущих переменных со значениями вы можете использовать функцию who, но это не та проблема, которую вы представили.

6 голосов
/ 15 июля 2011

Я добавляю еще один раствор в смесь (однострочник):

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

Какие выходы:

Error in var: mat
1 голос
/ 13 июля 2011

Если вы хотите распечатать переменные, присутствующие в функции, вы можете использовать функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...