immer 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
immer 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
immer 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 GPL
开发语言 C/C++ 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 王练
适用人群 未知
收录时间 2016-11-28

软件简介

immer 是一个用 C ++ 编写的可持久化和不可更改的数据结构库。

  • 可持久化意味着修改数据结构时,将保留旧值。

  • 不可更改意味着所有的操作方法都是 const。

对象不会在适当位置修改,但会返回新值。 因为旧值仍然存在并且永远不会改变,所以新值可以透明地保持对它的公共部分的引用。 这个属性被称为结构共享。

举例:

#include <immer/vector.hpp>
int main()
{
    const auto v0 = immer::vector<int>{}
    const auto v1 = v0.push_back(13);
    assert(v0.size() == 0 && v1.size() == 1 && v1[0] == 13);

    const auto v2 = v1.set(0, 42);
    assert(v1[0] == 13 && v2[0] == 42);
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2018/12/07 19:39

Immer 实战讲解

文章在 github 开源, 欢迎 Fork 、Star ! 前言 Immer 是 mobx 的作者写的一个 immutable 库,核心实现是利用 ES6 的 proxy,几乎以最小的成本实现了 js 的不可变数据结构,简单易用、体量小巧、设计巧妙,满足了我们对JS不可变数据结构的需求。 无奈网络上完善的文档实在太少,所以自己写了一份,本篇文章以贴近实战的思路和流程,对 Immer 进行了全面的讲解。 数据处理存在的问题 先定义一个初始对象,供后面例子使用: 首先定...

0
0
发表了博客
2019/10/20 09:07

150 行代码,手搓一个 Immer

感谢支持ayqy个人订阅号,每周义务推送1篇(only unique one)原创精品博文,话题包括但不限于前端、Node、Android、数学(WebGL)、语文(课外书读后感)、英语(文档翻译) 如果觉得弱水三千,一瓢太少,可以去 http://blog.ayqy.net 看个痛快 写在前面 Immer结合 Copy-on-write 机制与 ES6 Proxy 特性,提供了一种异常简洁的不可变数据操作方式: const myStructure = { a: [1, 2, 3], b: 0 }; const copy = produce(myS...

0
0
发表了博客
2019/05/18 11:38

Angular 学习笔记 immer 使用

https://github.com/immerjs/immer#supported-object-types immer 是用来做 immutable 的. angular 的 change detech 机制, 有时候为了要性能好一些,我们需要用 onPush 然后得配合 immutable 来让 input 触发. 但是呢, immuable.js 写起来很丑, 原生 es6 得写法也不好看. 于是就有了 immer. 早前 immer 完全不支持 class 所以我就没有用,最近看了一下发现部分支持了. 所以开始用了. import { produce, immerable } from "imm...

0
0
2019/09/05 10:25

使用 React Context, Hooks, Immer, Golang 创建一个TodoList

背景 上周末在家没啥事, 想写点东西,一时不知道写什么好。 然后就想起来一个去了Airbnb 的同学, 说Airbnb 的面试风格是以实操为主,她面了8轮, 轮轮都是写代码(2018年), 令人十分害怕。 代码题目都不是很难, 简单分享几道题: 然后我就看到了实现一个Todo List。 这种题目不难, 但是灵活度很高, 没有什么限制条件, 你随意发挥, 可以从多方面考察候选人。 就拿这道题下手吧, 开造。 [ 文末有本文全部的源代码, 通过...

0
1
发表于大前端专区
2019/03/01 20:22

immer.js 实战讲解文档

> 文章在 [github](https://github.com/ronffy/immer-tutorial) 开源, 欢迎 Fork 、Star ! ## 前言 [Immer](https://github.com/mweststrate/immer) 是 mobx 的作者写的一个 immutable 库,核心实现是利用 ES6 的 proxy,几乎以最小的成本实现了 js 的不可变数据结构,简单易用、体量小巧、设计巧妙,满足了我们对JS不可变数据结构的需求。 无奈网络上完善的文档实在太少,所以自己写了一份,本篇文章以贴近实战的思路和流程,...

0
0
发表了博客
2019/10/13 21:13

Copy-on-write + Proxy = ?

感谢支持ayqy个人订阅号,每周义务推送1篇(only unique one)原创精品博文,话题包括但不限于前端、Node、Android、数学(WebGL)、语文(课外书读后感)、英语(文档翻译) 如果觉得弱水三千,一瓢太少,可以去 http://blog.ayqy.net 看个痛快 一.简介 Immer (German for: always) is a tiny package that allows you to work with immutable state in a more convenient way. Immer提供了一种更方便的不可变状态操作方式 二....

0
0
发表于大前端专区
01/24 22:35

antd 中 @umijs/plugin-dva 如何使用?

### 特性概览 1. 约定的 model 组织方式 2. 文件名即 namespace 3. 内置 dva-loading,直接 connect loading 字段使用即可 4. 支持 immer,通过配置 immer 开启 ### 约定的 model 组织方式 **model 文件** 符合以下规则的文件会被认为是 model 文件, src/models 下的文件 src/pages 下,子目录中 models 目录下的文件 src/pages 下,所有 model.ts 文件 **文件校验** 默认,上一小节的找到的文件,会做一次校验,校验通过后,才...

0
0
发表了博客
2020/03/06 23:24

01 Taro_Mall 开源多端小程序框架设计

项目介绍 Taro_Mall是一款多端开源在线商城应用程序,后台是基于litemall基础上进行开发,前端采用Taro框架编写,现已全部完成小程序和h5移动端,后续会对APP,淘宝,头条,百度小程序进行适配。Taro_Mall已经完成了 litemall 前端的所有功能 扫码体验 由于小程序没有认证,只发布了一个预览版,只能加15个人,如有需要,请点击小程序申请 <img src='https://gitee.com/qiaojie/taro-mall/raw/master/public/xiaochengxu.jpg' w...

0
0
发表于开发技能专区
01/23 20:29

聊聊不可变数据结构

三年前,我接触了 [Immutable](https://github.com/immutable-js/immutable-js) 库,体会到了不可变数据结构的利好。 Immutable 库具有两个最大的优势: 不可修改以及结构共享。 * 不可修改(容易回溯,易于观察。减少错误的发生) ```ts let obj = { a: 1 }; handleChange(obj); // 由于上面有 handleChange,无法确认 obj 此时的状态 console.log(obj) ``` * 结构共享( 复用内存,节省空间,也就意味着数据修改可以直接记录完整数...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
2 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部