0

通常当我想编译一个我可以使用的文件时

.compile /home/.../file.pro

但假设我只有变量中的这条路径。然后下面的代码

path = '/home/.../file.pro'
.compile path

返回错误,因为编译器认为path是一个文件并且找不到它。我怎样才能避免这种情况?

4

2 回答 2

1

您要使用的是 RESOLVE_ROUTINE 命令。它将文件名作为一个字符串,(所以你可以在一个变量中传递它),并且有几个关键字;IS_FUNCTION 可能是您最需要使用的功能。使用 /IS_FUNCTION 来编译函数,而不要使用它来编译过程。

这是文档:

http://www.physics.nyu.edu/grierlab/idl_html_help/R45.html#wp1073539

于 2013-09-05T21:52:49.413 回答
0

在 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 与传递的变量一起使用。

于 2013-12-11T03:58:52.683 回答