通常、私が使用できるファイルをコンパイルしたいとき
.compile /home/.../file.pro
ただし、このパスが変数のみであると仮定します。次に、以下のコード
path = '/home/.../file.pro'
.compile path
コンパイラpath
は をファイルと見なし、それを見つけることができないため、エラーを返します。どうすればこれを回避できますか?
通常、私が使用できるファイルをコンパイルしたいとき
.compile /home/.../file.pro
ただし、このパスが変数のみであると仮定します。次に、以下のコード
path = '/home/.../file.pro'
.compile path
コンパイラpath
は をファイルと見なし、それを見つけることができないため、エラーを返します。どうすればこれを回避できますか?
使用したいのは RESOLVE_ROUTINE コマンドです。ファイル名を文字列として取り (変数内に渡すことができます)、いくつかのキーワードがあります。IS_FUNCTION は、おそらく最も使用する必要があるものです。/IS_FUNCTION を使用して関数をコンパイルし、プロシージャをコンパイルするには省略します。
ドキュメントは次のとおりです。
http://www.physics.nyu.edu/grierlab/idl_html_help/R45.html#wp1073539
IDL で頻繁にこれを行わなければならないのはちょっとばかげていますが、変数と実行コマンド (.run など) を混在させる別の方法は、IDL_IDLBridge() オブジェクトを使用することです。
oBridge = IDL_IDLBridge()
oBridge->execute, '.compile ' + some_var
これと CALL_PROCEDURE または CALL_FUNCTION または EXECUTE との違いは、IDL_IDLBridge が対話型プロセスまたはコマンド ラインのような環境をインスタンス化することです。つまり、実行コマンドを含めることができるため、ディレクトリ内のすべての .PRO ファイルをコンパイルするためにファイル検索の結果を反復処理する foreach ループ内に .COMPILE を埋め込むことができます。
これを使用して、複数の .PRO ファイルを .SAV ファイルにパッケージ化することもできます。IDL_IDLBridge は子プロセスであるため、コンパイルされたものにはアクセスできませんが、渡された変数で SAVE/RESTORE を使用できることに注意してください。