字典与动态语言

字典(或者叫哈希表、关联数组..)与动态语言的渊源可谓极深。动态语言之所以动态,归根结底是因为把对变量的求值放在了运行时完成而非静态语言的编译时确定。动态语言程序中众多的不同层次的名字空间(或者说作用范围)其实就是一个个的字典,变量名为 key,对象为 value。
而对变量求值的过程就是对所在名字空间查找的过程,根据变量名,找出相应的对象,有时候在局部名字空间中没找到,还可能会自动跑到外部名字空间或是全局名字空间去找。
对于支持 OO 的动态语言,对对象的实现其实也都是字典,属性名为 key,属性值为 value ,属性的获取也就变成了对字典的查找。有时子类中找不到还会到父类中去找,这也就是动态语言对继承的实现。
javascript 的 prototype 可能是动态语言实现继承最直接最简洁的方式了。python 为 OO 加了几个新语法,新概念,还有对多重继承的支持,不过本质上其实还差不多。
字典的核心地位在 lua、javascript 中表现得最为明显,在 javascript 中字典和 object 其实就是同义词;在 python 中其实也不难找到字典的身影:locals()、globals()、还有(几乎)所有对象都有的 __dict__ 属性;ruby 这样的语言中这一点会藏得深一些。
【以下为个人感受】
字典是动态语言的灵魂,要使用好动态语言首先肯定是要认清这一点的,不过在实际软件开发中像 lua 一样直面字典编程未免太简陋了一些,javascript 稍微好点,python 完美,而 ruby 过了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值