`
凌川__
  • 浏览: 82370 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

对《Ruby入门》元编程的解释

阅读更多

有同学表示第九章元编程的例程不好理解。先道歉,因为能力不足于游刃有余地表达元编程的方方面面,所以我选择了只演示最简单的元编程,而不展开解释。

下面给出例程的一点注释,不保证你能理解。对于入门,知道Ruby长于元编程就可以了。

ruby 代码
  1.   
  2. class MetaPerson    
  3.      
  4.   def MetaPerson.method_missing(methodName, *args)  #重新定义Ruby内置的方法method_missing    
  5.     name = methodName.to_s   
  6.     begin     
  7.               #调用Ruby内置的方法 class_eval 自动生成一个新方法   
  8.       class_eval(%Q[          
  9.       def #{name}   
  10.         puts '#{name}, #{name}, #{name}...'   
  11.       end         
  12.      ])          
  13.     rescue  
  14.               #出现异常的时候,执行Ruby原有的method_missing(methodName, *args)    
  15.       super(methodName, *args)     
  16.     end  
  17.   end  
  18.      
  19.   def method_missing(methodName, *args)         
  20.     MetaPerson.method_missing(methodName, *args) #实例method_missing调用类方法method_missing    
  21.     send(methodName)                 #使用Ruby内置的send方法,来呼叫前面自动生成的新方法   
  22.   end  
  23.      
  24.                          #下面代码类似于上面---------    
  25.   def MetaPerson.modify_method(methodName, methodBody)        
  26.     class_eval(%Q[   
  27.       def #{methodName}   
  28.         #{methodBody}   
  29.       end         
  30.      ])   
  31.   end  
  32.   
  33.   def modify_method(methodName, methodBody)       
  34.     MetaPerson.modify_method(methodName, methodBody)       
  35.   end  
  36.                         #---------------------------    
  37. end  #结束MetaPerson 类的定义   
  38.   
  39. class Person < MetaPerson     
  40. end  
  41.   
  42. person1 = Person.new  
  43. person2 = Person.new  
  44.   
  45. person1.sleep        #=> sleep, sleep, sleep...    
  46. person1.running      #=> running, running, running...    
  47.   
  48. person1.modify_method("sleep""puts 'ZZZ...'")   #修改方法sleep    
  49. person1.sleep        #=>  ZZZ...    
  50. person2.sleep        #=>  ZZZ...    
  51.   

 

这个例程有什么用呢?

假设《机械公敌》中的某一个ND5型机器人,在执行“保护人类计划”的过程中,发现微笑是很好的沟通行为,于是smile。虽然在这之前,ND5型机器人是不会smile的,但是就在某一个ND5型机器人试着smile的一瞬间,所有的ND5型机器人都可以smile了。当然,在以后的时间里,任何一个ND5型机器人都可以不断演化smile,并让其它的ND5型机器人共享smile的演化结果。


也许你不希望每一个ND5型机器人都会smile,你喜欢某一个实例对象有特立独行的行为,比如桑尼,桑尼确实与众不同,坚强,机智,谦逊(请允许我把这几个形容词用在一个机器人身上)。

为了达到你的要求,试试下面这个程序吧。

ruby 代码
  1. class Person    
  2.      
  3.   def method_missing(methodName, *args)     
  4.     name = methodName.to_s   
  5.     obj = self.inspect   
  6.     begin     
  7.       self.instance_eval(%Q[          
  8.       def #{name}   
  9.         puts '#{obj}, #{name} '   
  10.       end         
  11.      ])    
  12.       send(methodName)         
  13.     rescue  
  14.       super(methodName, *args)     
  15.     end       
  16.   end  
  17.        
  18.   def modify_method(methodName, methodBody)        
  19.     self.instance_eval(%Q[   
  20.       def #{methodName}   
  21.         #{methodBody}   
  22.       end         
  23.      ])   
  24.   end  
  25.     
  26. end  
  27.   
  28. p1=Person.new  
  29. p2=Person.new  
  30.   
  31. p1.sleep                                             #=> #<person:0x296cb14>, sleep   
  32. p1.modify_method(:sleep"puts 'This is p1 ZZZ...'")   
  33. p1.sleep                                             #=> This is p1 ZZZ...   
  34.   
  35. p2.sleep                                             #=> #<person:0x296c998>, sleep   
  36. p2.modify_method(:sleep"puts 'This is p2 ZZZ...'")   
  37. p2.sleep                                             #=> This is p2 ZZZ...   
  38.   
分享到:
评论

相关推荐

    Ruby入门教程,张开川编著

    张开川编著的Ruby入门教程,共九章,从开始安装到元编程,简单易懂,详细,对Ruby学习很有帮助

    ruby入门简单demo,学习练习编程语言

    ruby入门简单demo,学习练习编程语言

    Ruby从入门到精通

    《Ruby从入门到精通》是一本彻底而全面的最新指南,适合于各类Ruby读者,不管是编程初学者、Web开发人员,还是Ruby新手。《Ruby从入门到精通》从解说面向对象编程背后的原理开始,只通过几章的讲解,就构造出了真正...

    Ruby绝佳入门资料-双飞燕和元编程-英文版(要看就看英文)

    适合有点编程经验,先看ruby双飞燕,再看ruby元编程。 pdf,有目录,英文,这种资料尽量看英文的。 ruby双飞燕:The Ruby Programming Language ruby元编程:Pragmatic.Metaprogramming 助您学习又称

    Ruby编程语言中文版

    松本行弘原著,Ruby编程入门非常好的书籍。共两个文件

    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语言入门中文教程PDF+源代码.rar

    适用人群:适合对编程感兴趣、希望学习Ruby语言的初学者和入门者。无论是想要掌握一门新的编程语言、扩展编程技能还是寻找实践项目的学习者,都可以从这份资源中获益。 使用场景及目标:可用于自学、教学、编程入门...

    Ruby编程入门保姆级:轻松掌握20个核心概念!.zip技术关键词:Ruby编程语言、面向对象、类和对象、模块、方法、集合数据结

    适用人群:适合对编程感兴趣的初学者,以及希望快速入门Ruby语言的开发者。 使用场景及目标:通过幽默风趣的语言和生动的比喻,帮助读者理解并掌握Ruby编程的基本概念、数据结构、文件操作、正则表达式等核心知识点...

    2024年Ruby快速入门(10分钟).zip

    本博客为初学者提供了一个关于Ruby编程的快速入门教程。从Ruby的介绍和特点开始,逐步介绍了如何安装Ruby、学习基本语法、动手实践和高级特性。博客还提供了Ruby的实际应用场景,如Web开发、数据处理和自动化测试。...

    Ruby语言入门教程v1

    一种用于迅速和简便的面向对象编程的解释性脚本语言,Ruby语言入门教程

    ruby基础教程(中文第四版).epub

    这是一本绝对不会让初学者失望的Ruby入门书。 ——Ruby之父 松本行弘 本书为日本公认的最好的Ruby入门教程。 松本行弘亲自审校并作序推荐。 本书支持最新的Ruby 2.0, 也附带讲解了可运行于1.9版本的代码, ...

    Ruby语言入门教程

    我想,回报网络的最好方式就是在网络上还没有Ruby中文书籍的时候,编著一本Ruby中文入门教材。感谢编程语言发展史上的前辈们;感谢网络论坛上程序员们或是理智,或是激烈的讨论;感谢一切看到这本书的人。

    Ruby 编程语言的书籍

    这本书涵盖了 Ruby 的基础知识和高级特性,包括对象模型、控制流、模块和类、异常处理、元编程等方面的内容。它适合初学者入门,同时也提供了一些进阶的话题,能够帮助读者系统地学习和掌握 Ruby 编程语言。

    Ruby完全自学手册 下

    虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的应用领域包括系统管理、网络编程、图形处理、图形界面开发以及web开发等开发热门领域。希望借助于平易的讲解,让读者在学习的过程中,理解Ruby的编程...

    Ruby菜鸟入门指南.md

    这份文档是Ruby编程入门指南,主要内容包括: 1. 字符串的几种表示方式(单引号、双引号、多行字符串)及其区别。 2. 符号(Symbol)的概念及作用,如用于Hash的键。 3. Ruby中"一切皆对象"的理念,数字、布尔值、类、nil...

    Ruby语言入门到精通

    全书分为三篇:第一篇介绍编程以及Ruby的基本概念,并用简单的例子快速引导读者开发真正的Ruby应用程序;第二篇讲解Ruby语言的核心概念和语法,并综合这些概念和语法,以机器人小程序为例进行了实战开发;第三篇深入...

Global site tag (gtag.js) - Google Analytics