变量

DOpus 中的脚本都是一次性的, 脚本的全局变量并不会被保持,每次调用时脚本都会被重新初始化。如果想要在两次调用之间保持值,就需要使用 DOpus 提供的变量(Var)。

作用域

DOpus 的变量有以下几种作用域:

作用域
访问途径
持久存储

全局

DOpus.vars

文件窗口

Lister.vars

可存储在文件窗口布局中

文件夹标签

Tab.vars

可存储在文件窗口布局中

脚本

对话框

Dialog.Vars

命令

Command.vars

不可持久存储;不会影响调用者的变量

持久存储的变量可以在重启 DOpus 后恢复原来的值,但只支持以下几个类型:

  • boolint

  • string

  • date

  • currency

  • Vector(只能使用以上类型的元素)

变量操作

  • 检测变量是否存在:Vars.Exists("name")

  • 获取变量:Vars.Get("name")

  • 设置变量:Vars.Set("name", "value")

  • 删除变量:Vars.Delete("name")

值类型

尽管 DOpus 的文档中说变量可以存储任意类型的值,但至少在 JScript 中实际情况并非如此,既不支持数组也不支持对象:

var test1 = [1, 2, 3];
var test2 = { a: 1 };
DOpus.vars.Set("test1", test1);
DOpus.vars.Set("test2", test2);
// 'DOpus.vars.Get(...).0' 为 null 或不是对象 (0x800a138f)
DOpus.Output(DOpus.vars.Get("test1")[0]);

// 'DOpus.vars.Get(...).a' 为 null 或不是对象 (0x800a138f)
DOpus.Output(DOpus.vars.Get("test2").a);

如果你必须要使用复杂类型,可以使用 JSON.stringify() 将值序列化后保存到变量,再使用 JSON.parse() 来反序列化,得到原值。

变量枚举

JScript:

DOpus.Output(DOpus.vars.count);
for (var e = new Enumerator(DOpus.vars); !e.atEnd(); e.moveNext()) {
    DOpus.Output(e.item().name + ": " + e.item().value);
}

vars 是 Collection,不能通过下标访问元素(尽管文档中错误地说可以这样做);也不能使用 forEach。

VBScript:

For Each Var in DOpus.Vars
    DOpus.Output(Var & ": " & Var.value)
Next

你可以通过 Global Variable Management Dialog 来查看和管理全局变量:

最后更新于