这是我在玩Ruby的那三天里面学到的最给力的东西,找不到对应的词汇用来说明这其中的美妙,词穷的节奏。运行时操作自身的代码,这一点就有点类似于人工智能,在运行的时候不断的学习,未来的机器人都可以这样不是么?能做到这点的语言不多,Ruby算一个,Python算一个。只是将这种特性放在Python上,似乎有点不伦不类,Python的特性是简单。放在Ruby上就是一种有意思的事,我们可以不断重构代码,不断简化其中的设计。
元编程 metaprogramming
元编程是写出编写代码的代码
相关部分参考的书籍就是源自《Ruby元编程》,至于优缺点这个就不好讨论了,优点是你可以简化现有代码的重复,缺点是动态的动态可能需要消耗CPU时。
我想我只是学会了其中的动态方法,只是因为有些东西可能不是很容易令人理解,或者说不想用的技术。人都是有信仰的,我们对于技术也是如此。现在也是到了可以玩新技术的时间,虽然还有很多章节需要去理解,不过还是先整理一下当前的这些思路。
我不喜欢Java的原因在于过多的重复代码,以及需要编译,当然我觉得还是脚本语言+编辑器比较适合我。(转载保留Phodal's BlogPhodal'szenthink)
元编程之旅
重复的重复
对于我的这些代码,我实在是头疼级了,简化一部分后的模型- defget_weekday_counts
- week_results=@week_results
- result=Array.new()
- i=0
- weekday_counts=0
- whilei5
- weekend_counts=weekend_counts+1
- end
- i=i+1
- end
- returnweekend_counts
- end
- defself.define_component(name)
- define_method(name){
- i=0
- day=DayCount.new(0,0)
- whilei<@week_results.size
- @result=@result.push(@week_results[i][5])
- sum=@week_map[@week_results[i][5]]
- ifsum>5
- day.weekend=day.weekend+1
- elsifsum<=5
- day.weekday=day.weekday+1
- end
- i=i+1
- end
- day.send"#{name}"
- }
- end
- self.define_component:weekday
- self.define_component:weekend
而我们在上一篇中对条件语句进行了一次简单的重构,这里就不多说了。原先的代码似乎更不错,问题是如果我们对他进行扩展的话,怕是没有那么简单,只是对于只有工作日和周末的东西,显得不是那么重要。
元编程的步骤
扩展现有的代码
- defget_week_counts
- week_results=@week_results
- result=Array.new()
- i=0
- weekday_counts=0
- whilei5
- weekend_counts=weekend_counts+1
- end
- i=i+1
- end
- returnweekend_counts
- end
于是我们就找到了这其中的重复部分。
动态方法生成
- defself.define_component(name)
- define_method(name){
- i=0
- day=DayCount.new(0,0)
- whilei<@week_results.size
- @result=@result.push(@week_results[i][5])
- sum=@week_map[@week_results[i][5]]
- ifsum>5
- day.weekend=day.weekend+1
- elsifsum<=5
- day.weekday=day.weekday+1
- end
- i=i+1
- end
- day.send"#{name}"
- }
- end
- self.define_component:weekday
- self.define_component:weekend
白板及总结
使用白板加动态代理是一个不错的方法,问题是别的语言的人是否看得懂,所以这里用的就是动态方法,至于要不要用到动态派发就要因人而异了。很有趣的Ruby元编程,不是么?
这是我在玩Ruby的那三天里面学到的最给力的东西,找不到对应的词汇用来说明这其中的美妙,词穷的节奏。运行时操作自身的代码,这一点就有点类似于人工智能,在运行的时候不断的学习,未来的机器人都可以这样不是么?能做到这点的语言不多,Ruby算一个,Python算一个。只是将这种特性放在Python上,似乎有点不伦不类,Python的特性是简单。放在Ruby上就是一种有意思的事,我们可以不断重构代码,不断简化其中的设计。
元编程 metaprogramming
元编程是写出编写代码的代码
相关部分参考的书籍就是源自《Ruby元编程》,至于优缺点这个就不好讨论了,优点是你可以简化现有代码的重复,缺点是动态的动态可能需要消耗CPU时。
我想我只是学会了其中的动态方法,只是因为有些东西可能不是很容易令人理解,或者说不想用的技术。人都是有信仰的,我们对于技术也是如此。现在也是到了可以玩新技术的时间,虽然还有很多章节需要去理解,不过还是先整理一下当前的这些思路。
我不喜欢Java的原因在于过多的重复代码,以及需要编译,当然我觉得还是脚本语言+编辑器比较适合我。(转载保留Phodal's BlogPhodal'szenthink)
元编程之旅
重复的重复
对于我的这些代码,我实在是头疼级了,简化一部分后的模型- defget_weekday_counts
- week_results=@week_results
- result=Array.new()
- i=0
- weekday_counts=0
- whilei5
- weekend_counts=weekend_counts+1
- end
- i=i+1
- end
- returnweekend_counts
- end
- defself.define_component(name)
- define_method(name){
- i=0
- day=DayCount.new(0,0)
- whilei<@week_results.size
- @result=@result.push(@week_results[i][5])
- sum=@week_map[@week_results[i][5]]
- ifsum>5
- day.weekend=day.weekend+1
- elsifsum<=5
- day.weekday=day.weekday+1
- end
- i=i+1
- end
- day.send"#{name}"
- }
- end
- self.define_component:weekday
- self.define_component:weekend
而我们在上一篇中对条件语句进行了一次简单的重构,这里就不多说了。原先的代码似乎更不错,问题是如果我们对他进行扩展的话,怕是没有那么简单,只是对于只有工作日和周末的东西,显得不是那么重要。
元编程的步骤
扩展现有的代码
- defget_week_counts
- week_results=@week_results
- result=Array.new()
- i=0
- weekday_counts=0
- whilei5
- weekend_counts=weekend_counts+1
- end
- i=i+1
- end
- returnweekend_counts
- end
于是我们就找到了这其中的重复部分。
动态方法生成
- defself.define_component(name)
- define_method(name){
- i=0
- day=DayCount.new(0,0)
- whilei<@week_results.size
- @result=@result.push(@week_results[i][5])
- sum=@week_map[@week_results[i][5]]
- ifsum>5
- day.weekend=day.weekend+1
- elsifsum<=5
- day.weekday=day.weekday+1
- end
- i=i+1
- end
- day.send"#{name}"
- }
- end
- self.define_component:weekday
- self.define_component:weekend
白板及总结
使用白板加动态代理是一个不错的方法,问题是别的语言的人是否看得懂,所以这里用的就是动态方法,至于要不要用到动态派发就要因人而异了。很有趣的Ruby元编程,不是么?