---
source_url: https://docs.dolphindb.cn/zh/funcs/ho_funcs/eachPost.html
fetched_at: 2026-05-19T09:44:56Z
category: funcs
title: eachPost
sha1: 06a6842a4135f09749c5ac9a70f156d6e5e56e6d
---

# eachPost

## 语法

`eachPost(func, X, [post],
[assembleRule|consistent=false])`

`func:O(X, [post])` 或 `X <operator>:O
[post]` 表示不指定 *assembleRule*，使用默认值

`func:OC(X, [post])` 或 `X <operator>:OC [post]`
表示指定 *assembleRule*，此例中指定为 C（Consistent）

## 详情

将给定函数/运算符应用到所有相邻的数据对上。

*eachPost* 高阶函数等同于：F(X[0], X[1]), F(X[1], X[2]), ..., F(X[n],
post).

## 参数

- **func** 是一个二元函数。
- **X** 可以是向量、矩阵或表。当 *X* 是向量时，*post* 必须是标量；当 *X*
  是矩阵时，*post* 必须是标量或向量；当 *X* 是表时，*post* 是标量或表；当 *post*
  未指定时，结果的最后一个元素为 NULL。
- **post** 是可选参数，用于为 *X* 的最后一个元素提供后序值，其数据形式要求取决于 *X* 的数据形式。
- **assembleRule** 可选参数，表示如何将子任务的结果合并为函数最终结果。接受一个整数或字符串作为输入，可选值如下：
  - 0 （或 "D"）：默认值，表示 DolphinDB
    规则，即根据所有子任务的结果来决定最终输出的数据类型和形式。当所有子结果具有相同的数据类型和形式时，多个标量合并为一个向量、多个向量合并为一个矩阵、多个矩阵合并为一个元组、多个字典合并为一张表；否则将所有子结果合并为一个元组输出。
  - 1（或 "C"）：表示 Consistent
    规则，即认为所有子结果的数据类型和形式都与第一个子结果相同，根据第一个子结果来选择最终结果的数据类型和形式。如果后续子任务返回的结果与第一个子任务的结果类型不一致，系统会尝试对后续结果进行类型转换。如果转换失败则抛出异常。因此，此规则只可在已知子结果的数据类型及形式一致时指定。此规则可使系统免于逐一缓存并检查每个子任务的计算结果，从而提升性能。
  - 2（或 "U"）：表示 Tuple 规则，系统不再对各子结果的类型和形式一致性进行检查，而是直接将子结果组装成一个元组输出。
  - 3（或 "K"）：表示 kdb+ 规则。与 DolphinDB 规则类似，都会根据所有子结果来决定最终结果形式。主要区别在于，kdb+
    规则下，只要有任一子任务返回向量，则最终结果必为一个元组；而在 DolphinDB
    规则下，子任务结果若均为长度相同的向量，则最终结果为一个矩阵。其他情况下，kdb+ 规则的输出与 DolphinDB 规则相同。

  注：

  - 自 2.00.15/3.00.3 版本起，新增了
    *assembleRule* 参数。该参数不仅实现了原 *consistent*
    参数的功能，还提供了更多的结果合并选项。*consistent* 是一个布尔值，默认值为 false，相当于
    *assembleRule*="D"；若为 true，则相当于
    *assembleRule*="C"。为保持兼容性，用户仍可使用 *consistent* 参数。如果同时指定
    *assemble* 和 *consistent*，将以 *consistent* 
    的值为准。
  - *assembleRule* 也可在高阶函数对应的函数模式符号后指定，通过字符 D/C/U/K 表示。以
    `eachPre (:P)` 为例，形如
    `sub:PU(X)`。不指定则使用默认值 D。

## 返回值

取决于 *assembleRule* 的值。

## 例子

```dolphindb
x=1..10;
eachPost(sub, x);
// output
[-1,-1,-1,-1,-1,-1,-1,-1,-1,]
// 等同于 [1-2, 2-3, ..., 9-10, NULL]

+:O x;
// output
[3,5,7,9,11,13,15,17,19,]
// 等同于 [1+2, 2+3, ..., 9+10, NULL]

x +:O 0;
// output
[3,5,7,9,11,13,15,17,19,10]
// 等同于 [1+2, 2+3, ..., 9+10, 10+0]

x=1..12$3:4;
x;
```

| col1 | col2 | col3 | col4 |
| --- | --- | --- | --- |
| 1 | 4 | 7 | 10 |
| 2 | 5 | 8 | 11 |
| 3 | 6 | 9 | 12 |

```dolphindb
-:O x;
```

| col1 | col2 | col3 | col4 |
| --- | --- | --- | --- |
| -3 | -3 | -3 |  |
| -3 | -3 | -3 |  |
| -3 | -3 | -3 |  |

```dolphindb
eachPost(\, x, x[0]);
```

| col1 | col2 | col3 | col4 |
| --- | --- | --- | --- |
| 0.25 | 0.571429 | 0.7 | 10 |
| 0.4 | 0.625 | 0.727273 | 5.5 |
| 0.5 | 0.666667 | 0.75 | 4 |

```dolphindb
def f1(a,b){
    return (a[`x])+(a[`y])+(b[`x])+(b[`y])
}

t = table(1 2 3 as x,2 3 4 as y)
t1 = table(1 as x,2 as y)
eachPost(f1,t,t1)

// output
(8,12,[10])
```
