Transform 逻辑介绍
ot.js 的逻辑
将用户的一次操作认为是一个光标从左到右完整遍历整个字符串并在过程中做出删除和插入操作的行为。
When an operation is applied to an input string, you can think of this as
if an imaginary cursor runs over the entire string and skips over some
parts, deletes some parts and inserts characters at some positions.These actions (skip/delete/insert) are stored as an array in the “ops” property.
这里要注意每次操作都认为是完整遍历了整个字符串,基于下面三种操作:
- retain,用一个正数 n 表示,表示光标向后移动 n 步
- delete,用一个负数 -n 表示,表示删除目前光标位置后的 n 个字符
- insert,用一个字符串 str 表示,表示向目前光标位置前插入 str
举例说明:
1 | |apple -> appe // | 代表光标位置 |
transform 源码走读
Transform 返回两个操作 A’ 和 B’, 实现 A 操作后应用 B’ 得到的结果和 B 操作后应用 A’ 操作相同。
1 | // Transform takes two operations A and B that happened concurrently and |
下面直接举例说明:
1 | 源字符串:apple |