这是我在玩Ruby的那三天里面学到的最给力的东西,找不到对应的词汇用来说明这其中的美妙,词穷的节奏。运行时操作自身的代码,这一点就有点类似于人工智能,在运行的时候不断的学习,未来的机器人都可以这样不是么?能做到这点的语言不多,Ruby算一个,Python算一个。只是将这种特性放在Python上,似乎有点不伦不类,Python的特性是简单。放在Ruby上就是一种有意思的事,我们可以不断重构代码,不断简化其中的设计。
元编程 metaprogramming
元编程是写出编写代码的代码
相关部分参考的书籍就是源自《Ruby元编程》,至于优缺点这个就不好讨论了,优点是你可以简化现有代码的重复,缺点是动态的动态可能需要消耗CPU时。
我想我只是学会了其中的动态方法,只是因为有些东西可能不是很容易令人理解,或者说不想用的技术。人都是有信仰的,我们对于技术也是如此。现在也是到了可以玩新技术的时间,虽然还有很多章节需要去理解,不过还是先整理一下当前的这些思路。
我不喜欢Java的原因在于过多的重复代码,以及需要编译,当然我觉得还是脚本语言+编辑器比较适合我。(转载保留Phodal's
BlogPhodal'szenthink)
元编程之旅
重复的重复
对于我的这些代码,我实在是头疼级了,简化一部分后的模型
def get_weekday_counts
week_results=@week_results
result=Array.new()
i=0
weekday_counts=0
while i5
weekend_counts=weekend_counts+1
end
i=i+1
end
return weekend_counts
end
有点大材小用的感觉,但是用来学习还是相当不错的例子,于是就一步步来,事实上,原先的代码可以直接用返回两个值来解决,这个就是Ruby的另外一个优点。
def self.define_component(name)
define_method(name){
i=0
day=DayCount.new(0,0)
while i<@week_results.size
@result=@result.push(@week_results[i][5])
sum=@week_map[@week_results[i][5]]
if sum>5
day.weekend=day.weekend+1
elsif sum<=5
day.weekday=day.weekday+1
end
i=i+1
end
day.send"#{name}"
}
end
self.define_component:weekday
self.define_component:weekend
而我们在上一篇中对条件语句进行了一次简单的重构,这里就不多说了。原先的代码似乎更不错,问题是如果我们对他进行扩展的话,怕是没有那么简单,只是对于只有工作日和周末的东西,显得不是那么重要。
元编程的步骤
扩展现有的代码
def get_week_counts
week_results=@week_results
result=Array.new()
i=0
weekday_counts=0
while i5
weekend_counts=weekend_counts+1
end
i=i+1
end
return weekend_counts
end
于是我们就找到了这其中的重复部分。
动态方法生成
def self.define_component(name)
define_method(name){
i=0
day=DayCount.new(0,0)
while i<@week_results.size
@result=@result.push(@week_results[i][5])
sum=@week_map[@week_results[i][5]]
if sum>5
day.weekend=day.weekend+1
elsif sum<=5
day.weekday=day.weekday+1
end
i=i+1
end
day.send"#{name}"
}
end
self.define_component:weekday
self.define_component:weekend
动态生成后的代码如上所示。
白板及总结
使用白板加动态代理是一个不错的方法,问题是别的语言的人是否看得懂,所以这里用的就是动态方法,至于要不要用到动态派发就要因人而异了。
很有趣的Ruby元编程,不是么?
分享到:
相关推荐
Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的...
python程序员的基本素养--你从没见过的Python变量引用(csdn)————程序
python打印三角形(csdn)————程序
Python程序员指南中文第二版 Python程序员指南中文第二版
外部python调用houdini python(csdn)————程序
Python实现飞机大战的完整代码——亲测可用
python期末复习——python知识要点(csdn)————程序
python程序员指南 python程序员指南 python程序员指南
python SNMP 模拟管理(csdn)————程序
python熵权法(csdn)————程序
python定点数(csdn)————程序
python 进程池(csdn)————程序
python入门——python基础语法2(csdn)————程序
python实现json diff(csdn)————程序
Python爬虫编程基础5天速成——P13——文件处理(csdn)————程序
python tkinter tkintertable(csdn)————程序
python四叶玫瑰数(csdn)————程序
初识Python 少儿编程python教案——初识Python全文共24页,当前为第1页。 Python基本概念 海龟编辑器 绘图准备 课程知识点 使用画笔 少儿编程python教案——初识Python全文共24页,当前为第2页。 Python基本概念 ...
本书的内容深入浅出,通俗易懂,从最简单的例子着眼逐步进阶,不仅适合初学者,对使用Python编写各种大型、复杂应用程序的程序员来说也是一本实用的参考书 本电子书非本人制作,收集来自互联网,版权归原作者所有,...
python看网络电视(csdn)————程序