通常当我想编译一个我可以使用的文件时
.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 实例化了一个交互式进程或类似环境的命令行。这意味着您可以包含执行命令,因此将 .COMPILE 嵌入到 foreach 循环中,该循环遍历文件搜索的结果以编译目录中的所有 .PRO 文件。
您还可以使用它来将多个 .PRO 文件打包成一个 .SAV 文件。请注意,IDL_IDLBridge 是一个子进程,因此您无法访问它已编译的任何内容,但您可以将 SAVE/RESTORE 与传递的变量一起使用。