QL语言参考-5别名.md
别名(Aliases)
别名是现有 QL 实体的替代名称。
定义了别名之后,可以使用该新名称引用当前模块命名空间中的实体。
定义别名#
您可以在任何模块的主体中定义别名。为此,您应该指定:
- 关键字
module
、class
或predicate
分别为module
、type
或非成员谓词non-member predicate
定义别名。 - 别名的名称。这应该是此类实体的有效名称。例如,有效的谓词别名以小写字母开头。
- 对QL实体的引用。这包括实体的原始名称,对于谓词,还包括谓词的arity。
还可以为别名添加注释。请参见别名可用的注释列表。
注意:这些注释适用于别名引入的名称(而不是底层QL实体本身)。
例如,别名可以对其别名具有不同的可见性。
模块别名(Module aliases)#
使用以下语法为模块定义别名:
module ModAlias = ModuleName;
例如,如果你创建了一个新的模块 NewVersion
,这个模块是旧版本的升级版本,你可以像下面这样反对旧版本这个名字:
deprecated module OldVersion = NewVersion;
这样,两个名称解析为同一个模块,但如果使用 OldVersion
名称,则会显示一个弃用警告。
类型别名(Type aliases)#
使用以下语法为类型定义别名:
class TypeAlias = TypeName;
注意,class
只是一个关键字。您可以为任何类型定义
别名ー即基元类型、数据库类型和用户定义的类。
例如,可以使用别名将原始类型 boolean
的名称缩写为 bool
:
class bool = boolean;
或者,使用 OneTwo
在 OneTwoThreeLib.qll
的模块 m 中定义的类 OneTwo
,你可以创建一个别名来代替使用更短的名称 OT:
import OneTwoThreeLib
class OT = M::OneTwo;
...
from OT ot
select ot
谓词别名#
使用以下语法为非成员谓词定义别名:
predicate PredAlias = PredicateName/Arity;
这适用于有返回结果或没有没有结果的谓词。
例如,假设您经常使用下面的谓词,它计算小于10的正整数的后续值:
int getSuccessor(int i) {
result = i + 1 and
i in [1 .. 9]
}
您可以使用别名将名称缩写为 succ:
predicate succ = getSuccessor/1;
作为一个没有结果的谓词的例子,假设你有一个谓词,它适用于任何小于10的正整数:
predicate isSmall(int i) {
i in [1 .. 9]
}
可以给谓词一个更具描述性的名称,如下所示:
predicate lessThanTen = isSmall/1;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人