Tag: 不可变

雷德克斯是不是光荣的全球状态?

所以我一周前开始学习React,我不可避免地遇到了状态问题,以及组件如何与应用程序的其他部分进行通信。 我四处搜寻,Redux似乎是本月的味道。 我阅读了所有的文档,我认为这实际上是一个非常革命性的想法。 这是我的想法: 一般认为国家是非常邪恶的,也是编程中的一个大错误。 Redux说,为什么不把它全部集中在一个全局状态树中,你必须发出改变的动作? 听起来不错。 所有的程序都需要状态,所以让我们把它粘在一个不纯的空间里,只是从里面修改它,所以错误很容易追踪。 然后,我们还可以声明性地将各个状态片段绑定到React组件,并让它们自动重绘,一切都很美丽。 不过,我对这个整个devise有两个问题。 首先,为什么状态树需要是不变的? 说我不在乎时间旅行debugging,热重载,并已经在我的应用程序中实现撤消/重做。 要做到这一点似乎很麻烦: case COMPLETE_TODO: return [ …state.slice(0, action.index), Object.assign({}, state[action.index], { completed: true }), …state.slice(action.index + 1) ]; 而不是这个: case COMPLETE_TODO: state[action.index].completed = true; 更不用说,我正在制作一个在线白板来学习,每一个状态的改变都可以像在笔画列表中添加笔触一样简单。 经过一段时间(数百次笔触)复制整个arrays可能开始变得非常昂贵和耗时。 我确定一个全局状态树,它独立于通过动作变异的UI,但是它确实需要是不可变的吗? 这样简单的实现有什么问题(非常粗略的草稿,在1分钟内写入)? var store = { items: [] }; export function getState() { return store; } export function […]

关于不可变string的变化的ID

关于strtypes的对象的id (在Python 2.7中)困惑我。 strtypes是不可变的,所以我期望一旦它被创build,它将始终具有相同的id 。 我相信我不会自言自语,所以我会发表一个input和输出序列的例子。 >>> id('so') 140614155123888 >>> id('so') 140614155123848 >>> id('so') 140614155123808 与此同时,它一直在变化。 但是,在指向该string的variables之后,情况会发生变化: >>> so = 'so' >>> id('so') 140614155123728 >>> so = 'so' >>> id(so) 140614155123728 >>> not_so = 'so' >>> id(not_so) 140614155123728 所以它看起来像冻结了id,一旦一个variables持有这个值。 的确,在del so和del not_so , id('so')的输出开始再次改变。 这与(小)整数不一样。 我知道在不变性和同一个id之间没有真正的联系; 但是,我正在试图找出这种行为的来源。 我相信熟悉python内部构件的人不会比我感到惊讶,所以我试图达到同样的观点。 更新 试着用不同的string给出不同的结果… >>> id('hello') 139978087896384 >>> id('hello') […]