You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:43:07