Как комментировать переменные MATLAB - PullRequest
2 голосов
/ 31 декабря 2010

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

Ответы [ 5 ]

4 голосов
/ 02 января 2011

Хотя я считаю, что лучшим (и самым простым) подходом было бы сделать ваши переменные самодокументированными, дав им описательные имена, - это на самом деле способ сделать то, что вы хочу использовать объектно-ориентированные аспекты MATLAB. В частности, вы можете создать новый класс, который подклассирует встроенный класс, чтобы у него было дополнительное свойство, описывающее переменную.

Фактически, в документации есть пример, который делает точно , что вы хотите. Он создает новый класс ExtendDouble, который ведет себя так же, как double, за исключением того, что к нему прикреплено свойство DataString, которое описывает данные в переменной. Используя этот подкласс, вы можете выполнять следующие действия:

N = ExtendDouble(10,'The number of data points')
N = 
The number of data points
     10

и N могут использоваться в выражениях так же, как и любое двойное значение. Используя этот пример подкласса в качестве шаблона, вы можете создавать «закомментированные» версии других встроенных числовых классов, за исключением тех, которым вам не разрешено создавать подкласс (char, cell, struct и function_handle).

Конечно, следует отметить, что вместо использования класса ExtendDouble, как я делал в приведенном выше примере, я мог бы вместо этого определить свою переменную следующим образом:

nDataPoints = 10;

, что делает переменную самодокументируемой, хотя требуется немного больше ввода. ;)

1 голос
/ 02 января 2011

Всегда всегда всегда оставляйте редактор Matlab открытым со сценарием, документирующим, что вы делаете. То есть присваивания переменных и расчеты.

Только исключения - это очень короткие сеансы, где вы хотите экспериментировать. Когда у вас есть что-то - добавьте это в файл (также легче вырезать и вставлять, когда вы видите всю историю).

Таким образом, вы всегда можете начать все сначала. Просто clear all и перезапустите скрипт. В вашей рабочей области никогда не бывает случайных временных.

В конце концов, когда вы закончите, у вас также будет что-то, что близко к «результату».

1 голос
/ 02 января 2011

Удобный способ решить эту проблему - иметь функцию, которая хранит и отображать комментарии для вас, то есть что-то вроде функции ниже, которая откроет диалоговое окно, если вы вызовете его с помощью comments('myVar'), чтобы позволить вамвведите новые (или прочитайте / обновите предыдущие) комментарии к переменной (или функции, или сотруднику) с пометкой myVar.

Обратите внимание, что комментарии не будут доступны в вашем следующем сеансе Matlab.Чтобы это произошло, вы должны добавить функцию сохранения / загрузки в comments (т.е. каждый раз, когда вы что-либо меняете, вы записываете в файл, и каждый раз, когда вы запускаете функцию и database пуста, вы загружаете файл, есливозможно).

function comments(name)
%COMMENTS stores comments for a matlab session
% 
% comments(name) adds or updates a comment stored with the label "name"
%
% comments prints all the current comments

%# database is a n-by-2 cell array with {label, comment}
persistent database

%# check input and decide what to do
if nargin < 1 || isempty(name)
    printDatabase;
else
    updateDatabase;
end

    function printDatabase
        %# prints the database
        if isempty(database)
            fprintf('no comments stored yet\n')
        else
            for i=1:size(database,1)
                fprintf('%20s : %s\n',database{i,1},database{i,2});
            end
        end
    end
    function updateDatabase
        %# updates the database

        %# check whether there is already a comment 
        if size(database,1) > 0 && any(strcmp(name,database(:,1)))
            idx = strcmp(name,database(:,1));
            comment = database(idx,2);
        else
            idx = size(database,1)+1;
            comment = {''};
        end

        %# ask for new/updated comment
        comment = inputdlg(sprintf('please enter comment for %s',name),'add comment',...
            5,comment);

        if ~isempty(comment)
            database{idx,1} = name;
            database(idx,2) = comment;
        end
    end
end
1 голос
/ 31 декабря 2010

Как насчет объявления другой переменной для ваших комментариев?
пример:

\>> num = 5;  
\>> numc = 'This is a number that contains 5';  
\>> whos  
...

Это мой первый пост в StackOverflow.Спасибо.

0 голосов
/ 01 января 2011

Думали ли вы об использовании структур (или ячеек, хотя структурам потребуется дополнительное использование памяти)?

'>> dataset1.numeric = 5;

' >> dataset1.comment ='Это набор данных, который содержит 5';

 dataset1 = 
   numerical: 5
   comment: 'This is the dataset that contains 5'
...