SICP小随笔2 —— 面向对象和函数闭包
P157
与所有状态都必须显示地操作和传递额外参数的方式相比,
通过引进赋值和将状态隐藏在局部变量中的技术,我们能以一种更模块化的方式构造系统。
这段话是意思和面向对象里面的类好像有异曲同工的作用。
我的想法是面向对象类的思想和函数闭包的思想其实本质上是一样的,
但是类跟接近人的思维(或者说其实是因为开始接触的是面向对象而不是闭包?)
为什么这么说?
首先看类,一个类里面的基本元素是变量和函数。
在没有涉及外部变量的情况下,类函数操作类内变量,作用域只限于当前创造对象。
于是,当我们要执行一个动作的时候只要调用对应的函数,比如: obj1.DrawLine()
如果是闭包呢。首先要有一个顶层的闭包函数,里面有什么呢?
里面是函数内的局部变量,还有函数内定义的函数。这两个东西和类是一模一样的有木有!!
而且闭包函数内定义的函数可以操作闭包函数内的变量。
只要顶层闭包函数返回了我们需要的函数,我们就可以像类一样(或者类其实是像它一样)封装使用了。
比如: (define DrawLine (SomeClosures 'DrawLine))
,我们就可以直接使用(DrawLine)
做和obj1.DrawLine()一样的事情了。
但是类和闭包这两个东西哪个好。我也不知道,等什么时候都熟悉了再说。
PS.稍微了解一点Go里面没有类的原因了,还是把SICP看下去之后再仔细研究一下Go