如何在dm脚本中导入其他源代码文件

问题描述 投票:2回答:1

是否可以在dm-script中使用多个代码文件来构造代码?类似于:

import "path/to/utility_functions.s";

utility_functions.do_something_general();

请注意,如果可能,我不想将代码作为菜单项。该代码仅包含我在主脚本中使用的功能。


我尝试了以下操作:

文件1:test.s

void test(){
    result("test\n");
}

文件2:require-test.s

AddScriptFileToPackage("path/to/test.s", "test", 3, "test-function", "", "", 1);

ExecuteScriptString("test()"); // works immediately but feels wrong
test(); // works after restart

现在我有以下问题:

  • 我必须在执行此脚本后重新启动DigitalMicrograph,否则test()无效(ExecuteScriptString("test()");有效,但是使用字符串来调用代码感觉不对,如果可能的话,我想避免这种情况)
  • [当我再次重新启动DigitalMicrograph时,AddScriptFileToPackage()表示'无法添加脚本,因为该软件包存在且为只读。 [...]'。有没有解决的办法,还是我必须使用try块?

我觉得我在某个地方没有做错这个。

import require dm-script code-structure
1个回答
2
投票

DM脚本不支持按需加载程序包,但是有两种不同的方法可以实现所需的目标:

使用库包

“”安装“脚本时,可以选择以菜单命令的形式将其安装为库。对于通过菜单命令(存储在全局首选项文件中)或通过脚本命令(可用于创建.gtk文件,然后可以从插件中添加/删除文件夹)。

“” menu“选项将安装脚本,以便通过菜单项调用一次,否则不会保留在内存中。

“ library”选项将在启动时执行一次脚本,并将脚本本身保持在作用域内。因此,您可以在库文件中定义方法(或类)并使其普遍可用。如果需要一些启动操作,可以将一些可执行代码放入库中。

将脚本库用作.gtk插件可能是实现所需目标的推荐方法。但是,它们总是被加载。

忠告:如果您创建库,请确保使用非常唯一的类和方法名称,以避免任何冲突。我建议在所有类/方法名称前加上一些库名前缀,即使用MyLib_MyClass而不是MyClass等。

从脚本内调用脚本代码

脚本语言支持两个命令来从脚本中调用脚本:

  • Number ExecuteScriptString( String text )

  • Number ExecuteScriptFile( String file_path )

使用命令从光盘执行脚本可以完成您想要的操作,但是以这种方式维护有用的'库'可能会很乏味。它还不允许您安装类。

© www.soinside.com 2019 - 2024. All rights reserved.