DFTACTGRP(* NO)を指定してILE RPGプログラムを作成すると、活動化グループが破棄されるまでプログラムがメモリー内に残ります。 LRをオフにしてプログラムを終了すると、変数は次の呼び出しで再初期化されるか、またはそれらの値を保持しますか?ILE RPGプログラムの変数値は呼び出し間にメモリー内に残ることはできますか?
答えて
短い答えACTGRP(*New)
が設定されていない限り
はありません、彼らは、再初期化されませんか、あなたには、いくつかの他の方法で起動グループを再利用します。 (プログラムがアンロードされていない以外)
ロング回答 *INLR
は、限り、あなたはサイクルメインプログラムを使用しているとして、RPGサイクルのではなく、アクティベーショングループの関数であり、そして予想通り、ほとんど機能しなければなりません。線形メインプログラムの場合、すべてのベットはオフです。このマニュアルでは、線形モジュールでサイクルに依存するフィーチャが「指定できない」と記載されています。このドキュメントでは、リニアモジュールで*INLR
が期待どおりに機能しないことを直接的には示していませんが、*INLR
がサイクルに結びついており、そのリニアモジュールにサイクルが含まれていないことを知る必要があります。リニアモジュールは、MAIN
またはNOMAIN
キーワードを使用するモジュールです。ちなみに、変数の初期化だけでなく、(あるいはその代わりに)LR
を制御することもあります。
ACTGRP(*NEW)
を使用すると、プログラムの起動時に新しいアクティベーショングループが作成され、プログラムの終了時に暗黙的に終了します。したがって、プログラムは、LR
がオンであるかオフであるか、またはプログラムがサイクルメインプログラムであるかリニアメインプログラムであるかにかかわらず、いつでも終了する。
アクティブ化グループまたはACTGRP(*CALLER)
を使用し、呼び出し側が名前付き活動化グループで実行していて、活動化グループ内のすべてのプログラムが終了したときに手動で活動化グループを再要求すると、フィールドが初期化されます。 RCLRSC
はここでは何の影響もありません。
デフォルトのアクティブ化グループ、つまりACTGRP(*CALLER)
を使用し、呼び出し元がデフォルトのアクティブ化グループで実行されていて、手動でRCLRSC
を実行している場合は、フィールドが初期化されます。 RCLACTGRP
はここでは何の影響もありません。これは問題を引き起こす可能性があるので注意してください。
最後に、これはグローバルスコープ内の変数にのみ適用されます。サブスコープ内で定義されたローカルスコープ変数は、静的変数として定義されていない限り、常にエントリ時に初期化され、リターン時に解放されます。静的ローカル変数はグローバル変数のように動作します。つまり、プロシージャの最初の呼び出し時に割り当てられ、初期化され、呼び出しをまたいで存続します。
リニアー・メイン・モジュールは、グローバル変数に関するノミネート・モジュールのように動作します。グローバル変数は、プロシージャがモジュールで最初に呼び出されたときに初期化され、決して再初期化されません。 https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzasd/cycvslinear.htm
私たちの議論に貢献していただき、ありがとうございます。これは、私が「線形主モジュール」という言葉に出会った初めてのことです。あなたが提供したリンクを研究することに興味があります。 – mike
- 1. ILE RPG - 時間値を数値に変換する方法は?
- 2. PHPからRPGプログラムを呼び出す
- 3. RPGプログラムが何か外部のもの、つまりWebサービスを呼び出すことはできますか?
- 4. ILE RPG programmはコンパイルされません
- 5. なぜtf。変数の値は、同じプログラム内の異なる呼び出しで変化しませんか?
- 6. JNIが呼び出すCプログラムからC関数を呼び出すことはできますか?
- 7. RPGからiSeries上でリモートJavaプログラムを呼び出す
- 8. ILE RPGプログラムを作成するときに、QILEのデフォルト・アクティベーション・グループ名を避けるべきである理由
- 9. cfquery変数を動的に呼び出すことはできますか?
- 10. メソッドまたは変数を使用してリソースファイル内のエントリを呼び出すことはできますか?
- 11. RPG(または他のILE言語)での自動テスト
- 12. メソッド内で変数を呼び出すことで値を設定することができません
- 13. 関数呼び出しをソフトコードにすることはできますか?
- 14. 関数の呼び出しによる呼び出しは、パラメータの元の値を変更しますか?
- 15. Microsoft BotBuilderを関数呼び出しのように呼び出すことはできますか?
- 16. 関数呼び出し後にパイプ演算子でreturnを呼び出すことはできますか?
- 17. 値が変更されるたびにメソッドを自動的に呼び出すことはできますか?
- 18. devicereadyでファクトリバインド変数を呼び出すことはできますか?
- 19. 変数でメソッドを呼び出すことはできますか?
- 20. FORTRANは関数呼び出しの間に値をワイプしますか?
- 21. viewWillAppearとviewDidAppearの間でUIEventを呼び出すことはできますか?
- 22. 呼び出すことなく変数に呼び出すことができる
- 23. どのように私はPHPからCプログラムの関数を呼び出すことができますか?
- 24. Entity Framework DbSetを選択するときにテーブル値関数を呼び出すことはできますか?
- 25. AWS lambda - VPC内でラムダ関数を呼び出して呼び出すときには機能しません
- 26. Rubyでクラス変数を割り当てるときに、インスタンスメソッドを呼び出すことはできますか?
- 27. Chromeはどのように関数呼び出しスタックを検出しますか?私はpuppeteerで直接呼び出すことはできますか?
- 28. このJavaScript関数を一方向に呼び出すことはできますが、もう一方向に呼び出すことはできません。
- 29. 式内の変数を呼び出すことができません
- 30. 関数は、indexs()関数を呼び出すときに値
詳細な回答は@jmarkmurphyありがとうございます。 inz宣言で変数を初期化するとどうなりますか?プログラムが呼び出されるたびに、または初めてメモリにロードされるときにこの値に設定されますか?私。 inz宣言が最後の呼び出しの値を上書きするか、前の呼び出しの値が保持されますか? – mike
同じ答え。 'Inz'は、プログラムが初期化されたときに、その変数が何を初期化するかを決定します。 – jmarkmurphy
あなたの答えは、私が活性化グループについて読んでいると思います。しかし、デバッグをやめると、テストハーネスから繰り返し呼び出され、プログラムが実行されるたびに変数を再初期化します。プログラムは、指定された活動化グループで実行されます。コードはモジュール内にあり、ターゲット・リリースV7R1M0でコンパイルされます。私は変数を再初期化していることを知るために何ができるのかよくわかりません。 – mike