Lotus Script中设置环境变量及对象赋值时Set的使用时机
嘿,刚好对LotusScript里的Set关键字门儿清,来给你把这个问题掰扯明白!
LotusScript中
Set关键字的使用规则 核心原则:对象类型赋值必须用Set
LotusScript对对象类型和基本数据类型的赋值逻辑是完全分开的:
- 基本数据类型(比如
String、Integer、Double、Boolean这类):直接赋值就行,不需要Set。举个例子:Dim userAge As Integer userAge = 30 Dim isActive As Boolean isActive = True - 对象类型(包括所有
NotesXXX系列的Domino对象,比如NotesDocument、NotesUIDocument、NotesItem,还有表单上的控件对象如TextField、ComboBox等):必须用Set来赋值。因为你不是在复制对象本身,而是给变量分配一个指向该对象的引用。
就拿你遇到的场景来说:
Dim targetDoc As NotesDocument ' 正确写法:必须加Set,因为NotesDocument是对象类型 Set targetDoc = uidoc.Document
如果省略Set,Domino Designer就会抛出你看到的语法错误——这是新版本Designer对语法规范检查严格后的结果。
为什么遗留代码里Set的使用会乱七八糟?
老项目里出现这种不一致的情况,多半是这两个原因:
- 早期的LotusScript版本(比如R5及更早)对语法的校验没那么严格,有些场景下省略
Set可能不会立刻报错,但这属于不规范的“侥幸写法”,在新版本里就会被揪出来。 - 之前的开发者对
Set的规则理解不到位,凭经验或者感觉写,导致代码里出现混用的情况。
重构时的统一规范建议
在你重构重复代码的时候,只要记住这个判断标准就不会出错:
- 先看变量的类型:如果是
NotesDocument、NotesView、NotesDatabase这类Domino对象,或者是表单上的控件对象,赋值时必须加Set。 - 如果是字符串、数字、布尔值这类基本类型,直接赋值,不用加
Set。
再给你举个更贴合你场景的例子:
Dim formTxtField As TextField ' 表单上的文本框控件 Dim currentDoc As NotesDocument ' 正确的对象赋值写法 Set currentDoc = uidoc.Document Set formTxtField = uidoc.FieldGetText("UserName") ' 错误写法(会报错) ' currentDoc = uidoc.Document ' formTxtField = uidoc.FieldGetText("UserName")
内容的提问来源于stack exchange,提问作者Sidney
相关产品推荐
相关产品推荐

