Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/expressions/lambda/ Documentation version: v5.3.2 # 匿名表达式 匿名表达式(也被称作 Lambda 表达式)用于定义作用于列表中每个元素的操作。匿名表达式采用`x -> expr`的形式,其中`x`是输入参数,`expr`是表达式主体。 匿名表达式只能在接受匿名表达式作为参数的函数(即匿名函数)中使用。有关匿名函数的更多信息,请参见[匿名函数](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/lambda/)。 ## 语法 语法图源码 lambda_value_expression ```` lambda_value_expression ::= variable '->' value_expression ```` ## 参数 ### `variable` 匿名表达式中输入参数的名称。 ### `value_expression` 匿名表达式的主体。表达式主体可以是除聚合表达式和子查询表达式之外的任何值表达式。有关值表达式的更多信息,请参见[值表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/#_6)。 ## 示例 以下示例基于[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)。 ### 对列表应用匿名函数`transform()` ```` RETURN transform(LIST[1, 2, 3], x -> 2 * x + 1) AS a ```` 返回: ```` +---------+ | a | +---------+ | [3,5,7] | +---------+ ```` 在上述示例中,`x -> 2 * x + 1`是一个匿名表达式。`transform(LIST[1, 2, 3], x -> 2 * x + 1)`是一个函数表达式,`transform()`是一个匿名函数。匿名表达式`x -> 2 * x + 1`应用于列表`[1, 2, 3]`中的每个元素,将其转换为新元素。转换后的列表作为`a`返回。 ### 对列表应用匿名函数`filter()` ```` RETURN filter(LIST[1, 2, 3, 4, 5], x -> x % 2 = 0) AS a ```` 返回: ```` +-------+ | a | +-------+ | [2,4] | +-------+ ```` 在上述示例中,`x -> x % 2 = 0`是一个匿名表达式。`filter(LIST[1, 2, 3, 4, 5], x -> x % 2 = 0)`是一个函数表达式,`filter()`是一个匿名函数。匿名表达式`x -> x % 2 = 0`应用于列表`[1, 2, 3, 4, 5]`中的每个元素,返回一个新列表`a`,其中仅包含偶数元素。 ### 对列表应用匿名函数`reduce()` ```` RETURN reduce(LIST[1, 2, 3, 4, 5], 0, (acc, x) -> acc + x) AS a ```` 返回: ```` +----+ | a | +----+ | 15 | +----+ ```` 在上述示例中,`(acc, x) -> acc + x`是一个匿名表达式。`reduce(LIST[1, 2, 3, 4, 5], 0, (acc, x) -> acc + x)`是一个函数表达式,`reduce()`是一个匿名函数。匿名表达式`(acc, x) -> acc + x`应用于列表`[1, 2, 3, 4, 5]`中的每个元素,将它们累加到初始值`0`上。累加结果`15`作为`a`返回。 ### 在匿名表达式中引用外部变量 ```` ''' VALUE `offset` = 10 RETURN transform(LIST[1, 2, 3], x -> x + `offset`) AS a ''' ```` 返回: ```` +------------+ | a | +------------+ | [11,12,13] | +------------+ ````