有同学表示第九章元编程的例程不好理解。先道歉,因为能力不足于游刃有余地表达元编程的方方面面,所以我选择了只演示最简单的元编程,而不展开解释。
下面给出例程的一点注释,不保证你能理解。对于入门,知道Ruby长于元编程就可以了。
ruby 代码
-
- class MetaPerson
-
- def MetaPerson.method_missing(methodName, *args)
- name = methodName.to_s
- begin
-
- class_eval(%Q[
- def
- puts '
- end
- ])
- rescue
-
- super(methodName, *args)
- end
- end
-
- def method_missing(methodName, *args)
- MetaPerson.method_missing(methodName, *args)
- send(methodName)
- end
-
-
- def MetaPerson.modify_method(methodName, methodBody)
- class_eval(%Q[
- def
-
- end
- ])
- end
-
- def modify_method(methodName, methodBody)
- MetaPerson.modify_method(methodName, methodBody)
- end
-
- end
-
- class Person < MetaPerson
- end
-
- person1 = Person.new
- person2 = Person.new
-
- person1.sleep
- person1.running
-
- person1.modify_method("sleep", "puts 'ZZZ...'")
- person1.sleep
- person2.sleep
-
这个例程有什么用呢?
假设《机械公敌》中的某一个ND5型机器人,在执行“保护人类计划”的过程中,发现微笑是很好的沟通行为,于是smile。虽然在这之前,ND5型机器人是不会smile的,但是就在某一个ND5型机器人试着smile的一瞬间,所有的ND5型机器人都可以smile了。当然,在以后的时间里,任何一个ND5型机器人都可以不断演化smile,并让其它的ND5型机器人共享smile的演化结果。
也许你不希望每一个ND5型机器人都会smile,你喜欢某一个实例对象有特立独行的行为,比如桑尼,桑尼确实与众不同,坚强,机智,谦逊(请允许我把这几个形容词用在一个机器人身上)。
为了达到你的要求,试试下面这个程序吧。
ruby 代码
- class Person
-
- def method_missing(methodName, *args)
- name = methodName.to_s
- obj = self.inspect
- begin
- self.instance_eval(%Q[
- def
- puts '
- end
- ])
- send(methodName)
- rescue
- super(methodName, *args)
- end
- end
-
- def modify_method(methodName, methodBody)
- self.instance_eval(%Q[
- def
-
- end
- ])
- end
-
- end
-
- p1=Person.new
- p2=Person.new
-
- p1.sleep
- p1.modify_method(:sleep, "puts 'This is p1 ZZZ...'")
- p1.sleep
-
- p2.sleep
- p2.modify_method(:sleep, "puts 'This is p2 ZZZ...'")
- p2.sleep
-
分享到:
- 2007-02-11 00:21
- 浏览 2905
- 评论(0)
- 论坛回复 / 浏览 (0 / 5498)
- 查看更多
相关推荐
张开川编著的Ruby入门教程,共九章,从开始安装到元编程,简单易懂,详细,对Ruby学习很有帮助
ruby入门简单demo,学习练习编程语言
《Ruby从入门到精通》是一本彻底而全面的最新指南,适合于各类Ruby读者,不管是编程初学者、Web开发人员,还是Ruby新手。《Ruby从入门到精通》从解说面向对象编程背后的原理开始,只通过几章的讲解,就构造出了真正...
适合有点编程经验,先看ruby双飞燕,再看ruby元编程。 pdf,有目录,英文,这种资料尽量看英文的。 ruby双飞燕:The Ruby Programming Language ruby元编程:Pragmatic.Metaprogramming 助您学习又称
松本行弘原著,Ruby编程入门非常好的书籍。共两个文件
Ruby语言 1 Grant Ren 1 第一部分 Ruby语言基础 8 第一章 Ruby语言概述 8 §1.1 Ruby的历史 8 §1.2 Ruby名字的由来 8 ...第二章 Ruby编程环境 9 §2.1 Ruby的安装 9 §2.1.1 在Windows 95/98/Me/XP上安装Ruby 9
适用人群:适合对编程感兴趣、希望学习Ruby语言的初学者和入门者。无论是想要掌握一门新的编程语言、扩展编程技能还是寻找实践项目的学习者,都可以从这份资源中获益。 使用场景及目标:可用于自学、教学、编程入门...
适用人群:适合对编程感兴趣的初学者,以及希望快速入门Ruby语言的开发者。 使用场景及目标:通过幽默风趣的语言和生动的比喻,帮助读者理解并掌握Ruby编程的基本概念、数据结构、文件操作、正则表达式等核心知识点...
本博客为初学者提供了一个关于Ruby编程的快速入门教程。从Ruby的介绍和特点开始,逐步介绍了如何安装Ruby、学习基本语法、动手实践和高级特性。博客还提供了Ruby的实际应用场景,如Web开发、数据处理和自动化测试。...
一种用于迅速和简便的面向对象编程的解释性脚本语言,Ruby语言入门教程
这是一本绝对不会让初学者失望的Ruby入门书。 ——Ruby之父 松本行弘 本书为日本公认的最好的Ruby入门教程。 松本行弘亲自审校并作序推荐。 本书支持最新的Ruby 2.0, 也附带讲解了可运行于1.9版本的代码, ...
我想,回报网络的最好方式就是在网络上还没有Ruby中文书籍的时候,编著一本Ruby中文入门教材。感谢编程语言发展史上的前辈们;感谢网络论坛上程序员们或是理智,或是激烈的讨论;感谢一切看到这本书的人。
这本书涵盖了 Ruby 的基础知识和高级特性,包括对象模型、控制流、模块和类、异常处理、元编程等方面的内容。它适合初学者入门,同时也提供了一些进阶的话题,能够帮助读者系统地学习和掌握 Ruby 编程语言。
虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的应用领域包括系统管理、网络编程、图形处理、图形界面开发以及web开发等开发热门领域。希望借助于平易的讲解,让读者在学习的过程中,理解Ruby的编程...
这份文档是Ruby编程入门指南,主要内容包括: 1. 字符串的几种表示方式(单引号、双引号、多行字符串)及其区别。 2. 符号(Symbol)的概念及作用,如用于Hash的键。 3. Ruby中"一切皆对象"的理念,数字、布尔值、类、nil...
全书分为三篇:第一篇介绍编程以及Ruby的基本概念,并用简单的例子快速引导读者开发真正的Ruby应用程序;第二篇讲解Ruby语言的核心概念和语法,并综合这些概念和语法,以机器人小程序为例进行了实战开发;第三篇深入...