Mark24
记录灵感、技术、思考
Ruby剖析笔记
一、查找过程总结
- 查找方法
查找方法是顺着继承关系查找
- 查找变量
查找变量是按照词法作用域查找
所以代码的执行是一个这样的过程,一边扫描一边执行,读一块代码,生成对应的词法结构,使用指针记录上下文。
遇到变量的时候,主要是闭包的过程,开始顺着词法作用域,查找到变量。
如果变量是对象,调用方法,那么沿着对象的 自身、单例、父类、超父类继承链条向上查找。
二、块
1. 块是闭包
虽然块(block)被叫做block,这是按照形式去描述的名字。
他的类归属于 Proc,也就是 “程序、步骤”的意思,这里取步骤比较合理。
其实块就是闭包的应用。
2. 函数是一等公民
“函数是一等公民”的意思是Ruby中允许把函数作为数值保存在变量中或者作为参数传递。 Ruby中使用块来实现这些理念。
(区别于一些使用function实现的,块才是Ruby中原子性封装逻辑的存在)
3. 闭包和环境引用
lambda或者proc 关键字会把块转换为数值,但是记住,块是Ruby的闭包实现,这意味着新的数据值一定以某种方式同时包含块代码和环境引用。
(闭包的特别就是保持环境应用,可以顺着词法作用域查询变量)