Skip to content

求值表达式 (Eval)

与查询表达式不同,求值表达式是一组静态 API。你可以从 Koishi 中直接导入:

ts
import { $ } from 'koishi'

类型定义

{Type}

本节中使用的 Number, String, Boolean, Any 并非 JavaScript 中的内置函数,而是对应于 number, string, boolean, any 类型的求值表达式。例如,当一个表的 foo 字段有数值类型时,求值表达式 $.gt(row.x, 1) 是合法的,并且返回值的类型是 Boolean

ts
type $Date = Date
type $RegExp = RegExp

namespace Eval {
  type Number = number | EvalExpr<number>
  type String = string | EvalExpr<string>
  type Boolean = boolean | EvalExpr<boolean>
  type Date = $Date | EvalExpr<$Date>
  type RegExp = $RegExp | EvalExpr<$RegExp>
  type Any = string | number | boolean | $Date | $RegExp | EvalExpr<any>
}

EvalExpr

本节中任意求值表达式的返回值。

数值运算

$.add(...values)

  • values: Number[] 待相加的值
  • 返回值: EvalExpr<number>

将一组值相加。

$.subtract(x, y)

  • x: Number 被减数
  • y: Number 减数
  • 返回值: EvalExpr<number>

将两个值相减。

$.multiply(...values)

  • values: Number[] 待相乘的值
  • 返回值: EvalExpr<number>

将一组值相乘。

$.divide(x, y)

  • x: Number 被除数
  • y: Number 除数
  • 返回值: EvalExpr<number>

将两个值相除。

比较运算

$.eq(...values)

  • values: Any[] 待比较的值
  • 返回值: EvalExpr<boolean>

判断一组值是否相等。

$.ne(x, y)

  • x: Any 待比较的值
  • y: Any 待比较的值
  • 返回值: EvalExpr<boolean>

判断 x != y

$.gt(x, y)

  • x: Number 待比较的值
  • y: Number 待比较的值
  • 返回值: EvalExpr<boolean>

判断 x > y

$.gte(x, y)

  • x: Number 待比较的值
  • y: Number 待比较的值
  • 返回值: EvalExpr<boolean>

判断 x >= y

$.lt(x, y)

  • x: Number 待比较的值
  • y: Number 待比较的值
  • 返回值: EvalExpr<boolean>

判断 x < y

$.lte(x, y)

  • x: Number 待比较的值
  • y: Number 待比较的值
  • 返回值: EvalExpr<boolean>

判断 x <= y

字符串运算

$.concat(...values)

  • values: String[] 待连接的值
  • 返回值: EvalExpr<string>

连接一组字符串。

布尔运算

$.and(...values)

  • values: Boolean[] 待计算的值
  • 返回值: EvalExpr<boolean>

将一组布尔值做与运算。

$.or(...values)

  • values: Boolean[] 待计算的值
  • 返回值: EvalExpr<boolean>

将一组布尔值做或运算。

$.not(values)

  • values: Boolean 待计算的值
  • 返回值: EvalExpr<boolean>

将一个布尔值取反。

聚合运算

$.sum(x)

  • x: Number 数值表达式
  • 返回值: EvalExpr<number>

累加一组值。

$.avg(x)

  • x: Number 数值表达式
  • 返回值: EvalExpr<number>

计算一组值的平均值。

$.min(x)

  • x: Number 数值表达式
  • 返回值: EvalExpr<number>

计算一组值的最小值。

$.max(x)

  • x: Number 数值表达式
  • 返回值: EvalExpr<number>

计算一组值的最大值。

$.count(x)

  • x: Any 任意表达式
  • 返回值: EvalExpr<number>

统计不同元素的数量。