在上次的blog里提了这么一句:“
其实要多态,还不如在对象里面保存一个变量,变量里面是一段程序,运行到那就把这段程序拿出来eval一下,不比创建几个子类强么”。有读者问这个是什么意思,要我给个例子。其实这个很简单,只要想清楚所有的派都是纸老虎……嗯,我是说,所有的操作都是lambda。然后把操作当数据就好了。当然,建立在一个基础上:你使用的语言支持方便地把lambda作为一等公民。
class Host def state= (state) @state = state end def do_something @state(self) endendhost = Host.newhost.state = {|host| p host }
host.do_something
譬如说这是一个用Ruby实现的State模式(或者说是Strategy模式也好,这俩本来就不是很有区别)。Host在@state里面保存一个lambda(Ruby的黑话好像是叫closure),回头要做什么操作就拿这个出来用。State/Strategy模式用C#/Java的实现,大家都很熟悉,对比一下就明白我的意思了。
为上次的“
C#长得太丑了”一文道个歉,没想到随便开个玩笑也能引起语言大战,实在抱歉,各位读者就当我被班加罗尔的太阳晒昏了头打胡乱说罢。由此可以看到,中国程序员(或者说,部分中国程序员)确实觉悟甚高,阶级斗争这根弦绷得很紧……喜欢一种语言固然是没啥好说的,要是真对这个语言那么有信心,犯得着听见三句抱怨就跳起八丈高么?
(补充:上面例子中的lambda还可以写得更漂亮一点,do_something可以写成这样
def do_something @state end而这个传进去的lambda就可以写成
host.state = { p self }
这个事情就有点奇妙:lambda的context是在它定义的地方,而不是它调用的地方,也就是说这个lambda的self其实并不是host。不过有个tricky的办法:用caller可以找到这个lambda的调用者,然后把这个caller给mixin成当前context的self,调用完以后再mixin回来……感谢Obie的灵感和徐八x的实现。)
分享到:
相关推荐
西行漫记简答题.doc
西行漫记第二篇.docx
《西行漫记》读后感.doc
很抱歉,根据您提供的信息,《西行漫记》并非IT领域的书籍,而是一本关于革命历史或者文化类的读物。通常,读后感主要涉及个人阅读后的思考、感悟和书中主题的提炼,这并不符合您要求的IT专业知识点的产出。为了满足...
2022年东数西算深度研究报告:一体化大数据中心启动,推动数据中心绿色高质量发展.pdf
西厢记的读后感 《西厢记》读后感:古典浪漫爱情的终结
西藏路网矢量数据是地理信息系统(GIS)领域的重要资源,尤其对于规划、交通管理和研究而言,具有极高的价值。这些数据通常包含了西藏地区城市道路、国道、省道及高速公路等各类道路的详细信息,包括但不限于道路的...
在“西电数据挖掘大作业之商场数据分析”项目中,我们主要关注的是如何利用数据挖掘技术来探索商场销售数据中的模式、趋势以及关联性。这个项目可能是西安电子科技大学(简称“西电”)数据挖掘课程的一个实践环节,...
《GrADS学习资料:第2章 数据处理》 在深入探讨GrADS的数据处理之前,我们需要了解数据格式的基础知识。GrADS是一种强大的图形显示和数据分析系统,用于气象和海洋学数据。在使用GrADS进行绘图时,数据文件需要遵循...
数据结构是计算机科学中至关重要的基础课程,它涵盖了多种数据组织方式,如线性表、栈、队列、串、数组、树、图等。在西电数据结构的上机实验中,学生需要掌握这些基本数据结构的存储结构、基本运算以及如何利用它们...
为了充分利用这些数据,用户需要具备一定的GIS操作技能,了解如何在ArcGIS等软件中导入、查看、编辑和分析Shapefile数据。同时,理解地理坐标系统和空间参考是至关重要的,因为这直接影响到数据的精确性和分析结果的...
- 数据排放顺序遵循特定规则:从内到外,即经度x(从西到东)、纬度y(从南到北)、高度z(从低到高)、物理变量vars、时间t。 - 编程时,外层循环通常是时间t,内部循环依次为层次、纬度y、经度x。 4. **数据...
数据结构是计算机科学中的核心课程,它探讨了如何在计算机中组织、存储和处理数据,以便高效地执行各种操作。西安交通大学朱站立教授的“数据结构”课件是一份宝贵的教育资源,适合计算机科学的学生和从业者深入理解...
数据挖掘是一种从海量数据中提取有价值知识的过程,它在信息技术领域扮演着至关重要的角色。西安电子科技大学(简称“西电”)的这个数据挖掘实验报告提供了深入理解和实践这些概念的机会。该报告详细介绍了实验的...
西藏藏族自治区12.5m分辨率DEM数据 数据来源:ALOS 数据格式:栅格 txt中为数据下载链接和作者联系方式,想或者全国范围的数据均可以联系作者 关注并私聊作者:免费分享30m分辨率的全国DEM,版本有NASA SRTM 3.0、...
根据给定文件的信息,我们可以提炼出以下相关的操作系统知识点: ### 信号量与临界区管理 **背景**:操作系统中的进程同步与互斥是保证多进程系统正确运行的基础。信号量是一种广泛使用的机制,用于控制多个进程对...
数据结构是计算机科学中的核心课程之一,它研究如何在计算机中高效地组织和管理数据,以便进行快速查找、插入和删除等操作。C语言是一种强大的编程语言,特别适合实现底层的数据处理和算法实现。"西电数据结构上机题...