Skip to main content

CEL

// 字面量
true, false // 布尔值
42, 3.14 // 数字
"hello", 'world' // 字符串
b"bytes" // 字节
[1, 2, 3] // 列表
{"key": "value", "num": 42} // 映射

// 变量和字段访问
user.name // 字段访问
user.address.city // 嵌套字段
users[0].name // 列表索引
settings["timeout"] // 映射访问

// 函数调用
size(list) // 函数调用
substring(text, 0, 5) // 带参数函数
user.hasRole("admin") // 方法调用

// 宏使用
list.all(x, x > 0) // 检查所有元素
map.exists(k, k.startsWith("test")) // 检查存在元素
items.filter(x, x.status == "active") // 过滤元素
users.map(u, u.name) // 映射转换

// 复杂表达式
(user.age >= 18 && user.hasRole("member")) ||
(user.isAdmin == true) // 逻辑组合

order.total > 100 ? "premium" : "standard" // 条件表达式

size(items.filter(item,
item.price < 50 && item.category in ["electronics", "books"]
)) // 嵌套调用

操作符

操作符描述示例
&&逻辑与a && b
||逻辑或a || b
!逻辑非!a
==等于a == b
!=不等于a != b
<小于a < b
<=小于等于a <= b
>大于a > b
>=大于等于a >= b
+加法/连接a + b
-减法/取负a - b-a
*乘法a * b
/除法a / b
%取模a % b
?:条件运算符condition ? a : b
[]列表索引list[0]
[]映射访问map.keymap["key"]
in成员检查x in listkey in map

CEL 内置函数分为核心函数扩展库。核心函数自动包含,扩展库需要显式启用。

函数签名类别描述
getHours(timestamp: timestamp): int核心获取小时
getMinutes(timestamp: timestamp): int核心获取分钟
getSeconds(timestamp: timestamp): int核心获取秒
getMilliseconds(value: timestamp|duration): int核心获取毫秒
has(field: message.field|map.key): bool检查字段/键是否存在
all(iterable: list|map, predicate: function): bool检查所有元素满足谓词
exists(iterable: list|map, predicate: function): bool检查存在元素满足谓词
exists_one(iterable: list|map, predicate: function): bool检查恰好一个元素满足谓词
map(iterable: list|map, transform: function): T映射转换元素
map(iterable: list|map, predicate: function, transform: function): T条件映射转换
filter(iterable: list|map, predicate: function): T过滤元素
charAt(str: string, index: int): stringStrings获取指定位置字符
indexOf(str: string, substr: string): intStrings查找子串首次出现位置
lastIndexOf(str: string, substr: string): intStrings查找子串最后出现位置
lowerAscii(str: string): stringStrings转小写 (ASCII)
upperAscii(str: string): stringStrings转大写 (ASCII)
replace(str: string, old: string, new: string): stringStrings替换子串
split(str: string, sep: string): list<string>Strings分割字符串
substring(str: string, start: int, end?: int): stringStrings截取子串
trim(str: string): stringStrings去除首尾空白
join(strings: list<string>, sep?: string): stringStrings连接字符串列表
reverse(str: string): stringStrings反转字符串
format(template: string, args: list): stringStrings格式化字符串
quote(str: string): stringStrings引用字符串
slice(list: list, start: int, end: int): listLists切片
flatten(list: list, depth?: int): listLists展平嵌套列表
distinct(list: list): listLists去重
range(count: int): list<int>Lists生成整数列表
reverse(list: list): listLists反转列表
sort(list: list): listLists排序
greatest(...values: number): numberMath最大值
least(...values: number): numberMath最小值
abs(value: number): numberMath绝对值
sign(value: number): intMath符号
ceil(value: double): doubleMath向上取整
floor(value: double): doubleMath向下取整
round(value: double): doubleMath四舍五入
trunc(value: double): doubleMath截断
sqrt(value: double): doubleMath平方根
isInf(value: double): boolMath检查无穷大
isNaN(value: double): boolMath检查非数字
isFinite(value: double): boolMath检查有限数
bitOr(left: int, right: int): intMath位或
bitAnd(left: int, right: int): intMath位与
bitXor(left: int, right: int): intMath位异或
bitNot(value: int): intMath位非
bitShiftLeft(value: int, shift: int): intMath左移位
bitShiftRight(value: int, shift: int): intMath右移位
encode(data: bytes): stringEncodersBase64 编码
decode(data: string): bytesEncodersBase64 解码
contains(left: list, right: list): boolSets检查包含关系
equivalent(left: list, right: list): boolSets检查集合等价
intersects(left: list, right: list): boolSets检查交集
replace(target: string, pattern: string, replacement: string, count?: int): stringRegex正则替换
extract(target: string, pattern: string): stringRegex正则提取首次匹配
getExt(msg: message, extension: string): anyProtos获取扩展字段
hasExt(msg: message, extension: string): boolProtos检查扩展字段存在
bind(varName: string, initExpr: any, resultExpr: any): anyBindings绑定局部变量
all(...)TwoVarComprehensions测试宏
exists(...)TwoVarComprehensions测试宏
existsOne(...)TwoVarComprehensions测试宏
transformList(...)TwoVarComprehensions转换宏
transformMap(...)TwoVarComprehensions转换宏
transformMapEntry(...)TwoVarComprehensions转换宏
string(value: any): string类型转换转字符串
timestamp(value: string): timestamp类型转换转时间戳
type(value: any): string类型转换获取类型
uint(value: number|string): uint类型转换转无符号整数