主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

持续的

説明

持久var1……varNは,変数var1……varNが永続変数であることを宣言します。永続変数は,宣言される関数のローカル変数ですが,それらの値は関数の呼び出し間でメモリに保持されます。MATLAB®コマンドラインのコードや他の関数内のコードは永続変数を変更できません。

MATLABが特定の持续的ステートメントを最初に検出すると,永続変数は空の行列([])に初期化されます。

メモリ内の関数がクリアされるか変更されると,MATLABは永続変数をクリアします。関数をメモリ内に維持するには,mlockを使用します。

すべて折りたたむ

現在の作業フォルダー内に関数myFunを作成します。関数を呼び出すたびに、nの値が増加します。

函数myFun ()持续的n如果Isempty (n) n = 0;结束n = n + 1结束

コマンドプロンプトで,myFunを3回呼び出します。

myFun myFun myFun
N = 1 N = 2 N = 3

myFunをクリアしてから,さらに2回呼び出します。関数をクリアすると永続変数もクリアされます。

清晰的myFunmyFun myFun
N = 1 N = 2

最後のログ入力から3秒以上経過しているとデータのログを取る関数を作成します。logTimeを,logDataが最後にファイルに書き込みを行った時刻を格納する永続変数として定義します。

現在の作業フォルダー内のファイルで,関数logDataを定義します。

函数logData(帧,n)持续的logTime currTime = datetime;如果isempty(logTime) logTime = currTime;disp (日志记录初始值。) dlmwrite(帧,n)返回结束dt = currTime - logTime;如果Dt > seconds(3) disp(“日志”。) dlmwrite(帧,n,“添加”) logTime = currTime;其他的disp ([没有日志。num2str(秒(dt))' SEC自上次日志。'])结束结束

コマンドプロンプトで,logDataをループで呼び出します。このループには10回の反復があり,各反復にかかる時間は約1秒です。したがって,MATLABは4つの値をmyLog.txtに書き込みます(約0秒後,約3秒後,約6秒後,約9秒後)。

n = 1:10 pause(1) logData(“myLog.txt”兰特)结束
记录初始值。没有日志记录。自上次日志以来的1.005秒。没有日志记录。自上次日志以来的2.009秒。日志记录。没有日志记录。1.007 SEC自上次日志。没有日志记录。自上次日志以来的2.013秒。 Logging. Not logging. 1.005 sec since last log. Not logging. 2.007 sec since last log. Logging.

関数logDataをもう一度呼び出し,別の値を追加します。

logData (“myLog.txt”兰特)
日志记录。

関数logDataをクリアして,永続変数を再初期化します。関数logDataをもう一度呼び出します。今回は,この関数は値を追加せず,代わりにmyLog.txtを上書きします。

清晰的logDatalogData (“myLog.txt”兰特)
记录初始值。

ヒント

  • 永続変数とグローバル変数は,MATLABがいずれに対しても永久記録媒体を作成するという点で類似しています。永続変数がグローバル変数と異なるのは,永続変数を宣言している関数のみで前者が認識されるという点です。そのため,MATLABコマンドラインのコードや他の関数で永続変数を変更することはできません。

  • MATLABは永続変数を空の行列([])へと初期化するため,通常は関数により永続変数が空であるかどうか確認され,空であれば初期化されます。

    函数myFun ()持续的n如果Isempty (n) n = 0;结束n = n + 1;结束

  • 永続変数としての変数の宣言は,その変数に対する他の参照(入力引数や出力引数を含む)より前に行わなければなりません。たとえば,次の関数における持续的宣言は無効です。

    函数myfunA (x)持续的x结束函数myfunB x = 0;持续的x结束

  • 永続変数をクリアするには,その変数を宣言している関数の名前を指定して清晰的を使用します。たとえば,明确myFunのようになります。

拡張機能

R2006aより前に導入