7.3 変数のステータス
シンプルなワンショット プログラムを作成する場合、プロンプトでどの変数が使用可能かを確認できると非常に便利です。 関数who とその兄弟関数はwhos、whos_line_format次に示すように、メモリ内にあるものに関するさまざまな情報を表示します。
str = "A random string"; who -| Variables in the current scope: -| -| ans str
: who : who pattern … : who option pattern … : C = who (…)
指定されたパターンに一致する現在定義されている変数を一覧表示します。
有効なパターン構文は、コマンドで説明されているものと同じですclear。パターンが指定されていない場合は、すべての変数がリストされます。
デフォルトでは、ローカル スコープで表示可能な変数のみが表示されます。
以下は有効なオプションですが、組み合わせることはできません。
global
現在のスコープではなく、グローバル スコープ内の変数を一覧表示します。
-regexp
表示する変数を照合する際、パターンは正規表現とみなされます。regexp 関数で受け入れられる同じパターン構文が使用されます。
-file
次の引数はファイル名として扱われます。指定されたファイル内で見つかったすべての変数がリストされます。ファイルから変数を読み取る場合、パターンは受け入れられません。
関数として呼び出された場合は、指定されたパターンに一致する定義済み変数名のセル配列を返します。
See also: whos, isglobal, isvarname, exist, regexp.
: whos
: whos pattern …
: whos option pattern …
: S = whos ("pattern", …)
指定されたパターンに一致する現在定義されている変数の詳細情報を提供します。
オプションとパターン構文はコマンドの場合と同じですwho。
各変数に関する拡張情報は、次のデフォルトエントリを含む表にまとめられています。
属性
リストされた変数の属性。可能な属性は次のとおりです。
Attr
ローカルスコープ内の変数
blank
ローカルスコープ内の変数
c
複合型の変数。
f
仮パラメータ(関数引数)
g
グローバルスコープを持つ変数
p
永続変数
Name
変数の名前.
Size
変数の論理サイズ。スカラーは 1x1、ベクトルは 1xN または Nx1、2 次元行列は MxN です.
Bytes
変数を格納するために現在使用されているメモリの量.
Class
変数のクラス。例としては、double、single、char、uint16、cell、struct などがあります.
関数を使用して、テーブルをカスタマイズして、表示する情報を増減することができますwhos_line_format。
whos関数として呼び出された 場合は、指定されたパターンに一致する定義済み変数名の構造体配列を返します。各変数を記述する構造体のフィールドは、name、size、bytes、class、global、sparse、complex、nesting、persistent です
See also: who, whos_line_format.
: val = whos_line_format ()
: old_val = whos_line_format (new_val)
: old_val = whos_line_format (new_val, "local")
whosコマンドで使用されるフォーマット文字列を照会または設定します.
完全なフォーマット文字列は次のとおりです:
%[modifier]<command>[:width[:left-min[:balance]]];
次のコマンドシーケンスが利用可能です:
%a
変数の属性を出力します (c=複素数、s=スパース、f=仮パラメータ、g=グローバル、p=永続的).
%b
変数によって占有されるバイト数を出力します.
%c
変数のクラス名を出力します.
%e
変数によって保持される要素を出力します.
%n
変数名を出力します.
%s
変数の次元を出力します.
%t
変数の型名を出力します。
すべてのコマンドにはアライメント修飾子も付けられます:
l
左揃え.
r
右揃え(デフォルト).
c
列揃え (コマンド %s にのみ適用可能).
パラメータwidthは、印刷に使用する列の最小数を指定する正の整数です。フィールドは必要に応じて自動的に拡張されるため、最大値は必要ありません。
パラメータleft-minと は、balanceコマンド ' で列揃え修飾子が使用されている場合にのみ使用できます。%s'. balanceは、エントリ間で揃えられるフィールド幅内の列番号を指定します。番号は 0 から始まり、左端の列を示します。 left-min指定された残高列の左側の最小フィールド幅を指定します。
デフォルトの形式は次のとおりです。:
" %la:5; %ln:6; %cs:16:6:1; %rb:12; %lc:-1;\n"
オプションを使用して関数内から呼び出されると"local"、関数とそれが呼び出すサブルーチンに対して変数がローカルに変更されます。関数を終了すると、元の変数値が復元されます
See also: whos.
メモリ内にどの変数があるかを表示する代わりに、特定の変数が使用可能かどうかを判断することができます。こうすることで、変数の存在に応じてプログラムの動作を変更することができます。次の例はこれを示しています.
if (! exist ("meaning", "var"))
disp ("The program has no 'meaning'");
endif
: c = exist (name)
: c = exist (name, type)
変数、関数、ファイル、ディレクトリ、またはクラスとしての 名前の存在を確認します.
戻りコードcは次のいずれかです
1
nameは変数です。
2
nameは絶対ファイル名、Octaveの通常のファイル名path、または('.m') Octave の 関数ファイルpath。
3
名前は「.oct' または '.メックスOctave の ' ファイルpath。
5
nameは組み込み関数です。
7
nameはディレクトリです。
8
nameは classdef クラスです。
103
nameはファイルに関連付けられていない関数です (コマンド ラインで入力されます)。
0
名前が存在しません。
オプションの引数typeが指定されている場合は、指定されたタイプのシンボルのみをチェックします。有効なタイプは
"var"
変数のみをチェックします。
"builtin"
組み込み関数のみをチェックします。
"dir"
ディレクトリのみをチェックします。
"file"
ファイルとディレクトリのみをチェックします。
"class"
classdef クラスのみをチェックします。
タイプが指定されておらず、名前に一致する可能性のあるものが複数ある場合は、 exist次の優先順位リストに従ってコードが返されます: 変数、組み込み関数、oct ファイル、ディレクトリ、ファイル、クラス。
existnameという通常のファイルがOctave の検索パスに存在する場合は 2 を返します。検索パスにない他の種類のファイルに関する情報については、代わりに関数file_in_pathと 関数の組み合わせを使用してくださいstat。
プログラミング ノート: nameがバグのある .oct/.mex ファイルによって実装されている場合、existを呼び出すと Octave がクラッシュする可能性があります。高いパフォーマンスを維持するために、Octave は .oct/.mex ファイルをサンドボックス化せずに信頼します。
See also: file_in_loadpath, file_in_path, dir_in_loadpath, stat.
通常、Octave はメモリを管理しますが、変数を手動でメモリから削除することが実用的な場合もあります。これは通常、メモリのかなりの部分を占める大きな変数を扱う場合に必要です。IEEE 浮動小数点形式を使用するコンピュータでは、次のプログラムは約 128 MB のメモリを必要とする行列を割り当てます
large_matrix = zeros (4000, 4000);
この変数をメモリ内に置くと他の計算が遅くなる可能性があるため、手動でメモリから削除する必要がある場合があります。clear またはclearvars関数がこれを行います
: clear
: clear pattern …
: clear options pattern …
指定されたパターンに一致する名前を削除し、メモリを解放します。
パターンには次の特殊文字を含めることができます。
?
任意の 1 文字と一致します。
*
0 個以上の文字と一致します。
[ list ]
listで指定された文字のリストと一致します。最初の文字が!または の場合、 list^で指定された文字を除くすべての文字と一致します 。たとえば、パターンはすべての小文字と大文字のアルファベット文字と一致します。Windows では、角括弧は文字どおりに一致し、文字のグループ化には使用されません。 [a-zA-Z]
例えば、コマンド
clear foo b*r
を引数なしで呼び出すとclear、すべてのユーザー定義変数 (つまり、ローカル変数) が現在のワークスペースからクリアされます。存在するグローバル変数は現在のワークスペースでは表示されなくなりますが、グローバル ワークスペースでは引き続き存在します。関数は、この形式の の影響を受けませんclear。
以下のオプションは、長い形式と短い形式の両方で利用できます。
all, -all, -a
すべてのローカルおよびグローバルのユーザー定義変数と、すべての関数をシンボル テーブルからクリアします。
-exclusive, -x
次のパターンに一致 しない変数をクリアします。
functions, -functions, -f
関数シンボル テーブルから関数名をクリアします。関数が でメモリにロックされていない限り、永続変数はデフォルト値に再初期化されますmlock。
global, -global, -g
グローバル変数名をクリアします。
variables, -variables, -v
ローカル変数名をクリアします。
classes, -classes, -c
クラス構造テーブルとすべてのオブジェクトをクリアします。
-regexp, -r
パターン引数は正規表現として扱われ、一致するものはすべてクリアされます
ただし、-エクスクルーシブそして-正規表現長いオプションはすべてダッシュなしでも使用できます。 -エクスクルーシブ、他のオプションは 1 つだけ表示されます。すべてのオプションは、パターンの前に表示する必要があります。
プログラミング ノート: このコマンドは、変数とnameという名前の (シャドウされた) 関数の両方が現在定義されている場合にのみ、変数 nameをクリアします 。たとえば、関数 を定義し 、割り当て を実行してそれを非表示にしたとします。コマンドを1 回実行すると、変数定義がクリアされ、 の定義が関数として復元されます。2回目に実行すると、関数定義がクリアされます。 clear namefoofoo = 2clear foofooclear foo
グローバル変数にリンクされているローカル変数名がクリアされると、変数のローカル コピーのみが削除されます。グローバル コピーはそのままで、 を使用して復元できます。逆に、 は ローカル変数とグローバル変数の両方を削除します。 global global_varnameclear -g global_varname
See also: clearvars, who, whos, exist, mlock.
: clearvars
: clearvars pattern …
: clearvars -regexp pattern …
: clearvars … -except pattern …
: clearvars … -except -regexp pattern …
: clearvars -global …
指定されたパターンに一致する変数をメモリから削除します。
パターンには次の特殊文字を含めることができます。
?
任意の 1 文字と一致します。
*
0 個以上の文字と一致します。
[ list ]
listで指定された文字のリストと一致します。最初の文字が!または の場合、 list^で指定された文字を除くすべての文字と一致します。たとえば、パターンはすべての小文字と大文字のアルファベット文字と一致します。 [a-zA-Z]
もし、-正規表現オプションが指定されている場合、後続のパターンは正規表現として扱われ、一致するものはすべてクリアされます。
もし、-を除外するオプションが指定されている場合、後続のパターンではクリアされない変数が選択されます。
もし、-グローバルオプションが指定されている場合、すべてのパターンはローカル変数ではなくグローバル変数に適用されます。
引数なしで呼び出されると、clearvarsすべてのローカル変数が削除されます。
コード例:
で始まるすべての変数'x'と特定の変数 をクリアします"foobar"
clearvars x* foobar
特定の変数をクリアし"foobar"、正規表現を使用して'x'またはで始まるすべての変数をクリアします'y'.
clearvars foobar -regexp ^x ^y
"foobar"を除くすべての変数をクリア
clearvars -except foobar
"bar"で始まる変数"foo"(で終わるものを除く)をすべてクリアします。
clearvars foo* -except -regexp bar$
See also: clear, who, whos, exist.
: pack ()
MATLABのワークスペース メモリを統合します。
この関数は互換性のために提供されていますが、Octave では何も行いません。
See also: clear.
関数や変数に関する情報(ファイルシステム内の場所など)も、Octave 内から取得できます。これは通常、プログラムの開発中にのみ役立ち、プログラム内では役立ちません。
: type name …
: type -q name …
: text = type ("name", …)
ファイル、関数 (m ファイル)、変数、演算子、またはキーワードである 名前の内容を表示します。
type通常、関数や変数などの名前のカテゴリを説明するヘッダー行を先頭に付加します 。-qオプションはこの動作を抑制します。
出力変数が使用されていない場合は、内容が画面に表示されます。それ以外の場合は、各要素が要求された各関数の内容に対応する文字列のセル配列が返されます。
: which name …
: [str, …] = which ('name', …)
各名前の種類を表示します。
名前が関数ファイルから定義されている場合は、ファイルの完全な名前も表示されます。
See also: help, lookfor.
: what
: what dir
: w = what (dir)
ディレクトリdir内の Octave 固有のファイルを一覧表示します。
dirが指定されていない場合は、現在のディレクトリが使用されます。
戻り引数が要求された場合、見つかったファイルは構造体wに返されます。構造体には次のフィールドが含まれます。
path
ディレクトリdirへのフルパス
m
m ファイルのセル配列
mat
マットファイルのセル配列
mex
mex ファイルのセル配列
oct
oct ファイルのセル配列
mdl
mdl ファイルのセル配列
slx
slx ファイルのセル配列
p
pファイルのセル配列
classes
クラスディレクトリのセル配列(@クラス名/)
packages
パッケージディレクトリのセル配列(+パッケージ名/)
互換性に関する注意: Octave は mdl、slx、および p ファイルをサポートしていません。 whatこれらのカテゴリに対しては常に空のリストが返されます。
See also: which, ls, exist.