Python3 使用 nonlocal keyword 实现保存状态的嵌套函数

前言:
最近阅读一本书《代码之髓》, 其中篇章:《7.3 静态作用域是完美的吗》
介绍了 Python3 的 nonlocal 关键字, 从12月将工作语言升级到Python3后,
才从一本讲述编程语言概念的书籍里知晓这个 nonlocal -_-b

首先写个小Demo:

Continue reading

C++11 学习笔记(5) delegate 模式

delegeate 模式最早接触到是在大四实习ios开发时候.当时使用之后觉得
objc代码写起来很舒服(当时并没有对注册回调函数有清晰的概念)

现在用C++11的 functional 模拟实现 delegate 模式 :)

代码转自cprogramming

[题外话] 工作两年, 对回调函数的理解一次比一次有新的体会.

  • 首先阅读 Redis 的源码, 在C中大量的函数指针其实是注册的回调函数
  • 后来接触了 Lua 脚本(写交互状态的逻辑代码), 发现使用传统的
    面向对象和过程的实现方式 在代码开发上难度和时间会消耗很大又
    因为 Lua 本身支持函数式编程的方式(当时就只懂使用简单的保存
    状态的闭包), 通过项目实践和学习, 异步回调的理解加深, 同时将
    代码逻辑开发的难度降低.
  • 随后 Node.js 流行, 在使用其开发一个小型功能程序中惊奇地发现
    回调的使用与在 Lua项目中的理解是一致的, 更加对自己的工作的
    成果有了自信 :)

C++11 学习笔记(4) 11标准以前模仿 lambda 实现

C++11 推出了 lambda支持

而在之前要想模仿闭包的实现, 可以使用比较技巧的方式:
其原理是利用定义一个 functor类, 重写 operator() 操作符号
实现方式转自cprogramming

C++11 学习笔记(3) 使用闭包模拟实现 finally 关键字

代码出现异常时, 往往会对异常做处理, 而不是直接将程序 abort
而抛出异常之后往往也要做相应的资源释放或者清理步骤, 往往需要最终操作.

例如在在读文件过程:
1. FILE* f open 操作
2. 读文件块
3. 读取后在内存操作, 比如调用 operationRead(f); // 伪代码 操作成功 走 4, 否则出现异常; operationRead(f) 不能正常执行 走 5
4. 操作成功, 走 6
5. 处理异常, 比如打印, 走6
6. 此时属于 finally 步骤, 关闭文件句柄 close(f);

C++11并未实现 finally (注意: 与 final关键字有区别)

那么现在看看模拟实现, 转自codeproject

Continue reading