MATLABを使用しているときに、いくつかの変数についてコメントする必要があると感じることがあります。これらのコメントをこれらの変数内に保存したいと思います。したがって、ワークスペースで多くの変数を操作する必要があり、これらの変数の一部のコンテキストを忘れた場合、それらすべてに入力したコメントを読むことができました。ですから、変数にコメントを付け、その中にコメントを残したいと思います。
5 に答える
最良の(そして最も簡単な)アプローチは、変数にわかりやすい名前を付けて自己文書化することだと思いますが、実際には、MATLABのオブジェクト指向の側面を使用してやりたいことを行う方法があります。 。具体的には、組み込みクラスをサブクラス化する新しいクラスを作成して、変数を説明する追加のプロパティを含めることができます。
実際、ドキュメントには、あなたが望むことを正確に実行する例があります。変数内のデータを記述するプロパティがアタッチされているExtendDouble
ことを除いて、doubleと同じように動作する新しいクラスを作成します。DataString
このサブクラスを使用すると、次のようなことができます。
N = ExtendDouble(10,'The number of data points')
N =
The number of data points
10
またN
、double値と同じように式で使用できます。このサンプルサブクラスをテンプレートとして使用すると、サブクラス化が許可されていないもの(char
、、、、および)を除いて、他の組み込み数値クラスの「コメント付き」バージョンを作成できます。cell
struct
function_handle
もちろん、ExtendDouble
上記の例のようにクラスを使用する代わりに、次のように変数を定義できることに注意してください。
nDataPoints = 10;
これにより、変数の自己文書化が可能になりますが、もう少し入力が必要になります。;)
コメント用に別の変数を宣言するのはどうですか?
例:
\>> num = 5;
\>> numc = 'This is a number that contains 5';
\>> whos
...
これはStackOverflowでの私の最初の投稿です。ありがとう。
これを解決する便利な方法は、コメントの保存と表示を行う関数を用意することです。つまり、以下の関数のように、を呼び出すとダイアログボックスが開いて、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
常に常に常にMatlabエディターを開いたままにして、実行内容を文書化したスクリプトを使用してください。つまり、変数の割り当てと計算です。
例外は、実験したい非常に短いセッションです。何かができたら、それをファイルに追加します(履歴全体を確認できる場合は、切り取って貼り付けるのも簡単です)。
このようにして、いつでも最初からやり直すことができます。スクリプトclear all
を再実行してください。ワークスペースにランダムな一時的なものが浮かんでいることはありません。
最終的には、終了すると、「成果物」に近いものも得られます。
構造体(または構造体は追加のメモリ使用を必要としますが、セル)を使用することを考えましたか?
'>>dataset1.numerical = 5;
'>>dataset1.comment='これは5を含むデータセットです';
dataset1 =
numerical: 5
comment: 'This is the dataset that contains 5'