Matlab - как получить точный список параметров вызова функции в виде строки внутри функции? - PullRequest
1 голос
/ 22 марта 2012

Предположим, у меня есть функция:

function name_the_paramlist(varargin)
    % Print out varargin exactly how it is called as a string

По сути, я хочу, чтобы она вызывала:

name_the_paramlist({'x', x}, y, 1, 'hello', [1, 2; 3, 4])

должна вывести на экран строку:

'{''x'', x}, y, 1, ''hello'', [1, 2; 3, 4]}'

Любое предложение?

ETA: причина, по которой я хочу что-то вроде этого, состоит в том, чтобы, надеюсь, решить этот вопрос: Matlab - как создать подкласс класса набора данных, сохраняя конструктор параметра набора данных

1 Ответ

3 голосов
/ 22 марта 2012

Что ж, если вы наберете этот вызов функции в командной строке или запустите клавишу F9 (чтобы она сохранялась в истории), вы можете прочитать файл history.m и получить последнюю команду в виде строки.

fid = fopen(fullfile(prefdir,'history.m'),'rt');
while ~feof(fid)
    lastcmd = fgetl(fid);
end
fclose(fid);

Затем получите часть аргумента:

arg_str = regexp(lastcmd, '\w+\((.+)\)','tokens','once');
arg_str = strrep(arg_str{:},'''','''''');

ОБНОВЛЕНИЕ :

Другая идея.Если вы вызываете эту функцию из другого скрипта или функции (m-файла), вы можете использовать DBSTACK , чтобы вернуть имя m-файла и текущий номер строки:

SI = dbstack;
filename = SI(end).file;
lineNo = SI(end).line;

Тогда вы можетеСледуйте той же методике, что и в первом решении, чтобы прочитать эту строку из m-файла и получить часть аргумента.

В отличие от первого решения, это не сработает, если запустить из командной строки или в режиме ячейки редактора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...