Ruby元编程的白魔法书

在Ruby的世界中,程序员们享受着各种光怪陆离的语法糖,也经历着各种各样的陷阱。而这一切的根本就在于Ruby强大 的元编程能力。元编程就像Ruby世界的魔法,当其是白魔法的时候可以帮助你把程序变得异常简洁,美观;而当其是黑魔法 的时候,你将会迷失在一些很难解释的Bug中。

《Ruby元编程》就是一部告诉大家如何使用,控制Ruby元编程魔法的 秘籍。该书的写作手法非常值得称道,作者把所有的知识点浓缩在了一个星期的工作过程中,通过一个菜鸟和大牛针对项目 中遇到的各种问题的讨论,解决来引入各种元编程的知识点。 除此之外,在每个知识点的结尾处都还附带了有趣的小测验 , 让读者可以跟随着菜鸟的思路,感受到自己在一步一步的掌握元编程的思想。这一切的编排让这本书读起来非常的有趣 ,并且书中的理论知识与项目中的实战相结合的讲述方式,让读者更容易去思考如何在自己的项目中运用这些知识。

我是从同事的口中听说这本书的,他读完这本书之后说:“这本书基本上改变了其写代码的习惯。”,作为一个码 龄超过10年的程序员。如此赞誉一本书,让我决心一定要读一下这本书,读完之后,此书果然不负此赞誉。不管是初级程序 员,还是编程高手,都应该读一下这本书,如果你是Ruby程序员,那么这本书可以算是必读书之一。该书分为2个部分。第 一部分从对象模型,方法,代码块,类定义等方面一一剖析Ruby的设计原理,然后再通过实例告诉大家如何在实际应用中有 效的利用这些设计原理,同时作者还非常善良的提醒了大家在使用这些技巧时的注意事项,防止这些魔法变成黑魔法。第二 部分是剖析Rails中使用到的各种元编程技巧,读过之后,对理解Rails底层实现裨益良多,当然,对Rails无爱的读者可以直 接略过。

对象模型

提到对象,程序员首先想到的就是类这个概念,在本书第一章中,作者首先对Ruby世界的 类进行了一番基础的讲解:

不同于JAVA等静态语言,类定义中只能执行定义变量和方法的语句,在Ruby中,类定义的代码和其他的代码是一样的, 可以在其中执行任何的Ruby语句。

Ruby天生具有打开一个已经存在的类,并动态修改其内容的能力,但需注意猴子补丁的问题。

类的实例变量是存储在对象中,实例变量与该对象的类没有关系,当给对象的实例变量赋值时,该实例变量就生成了, 实例变量就像是一个挂载在对象上的HashMap,每个对象都可以拥有自己不同的HashMap。

方法的定义在对象自身的类中,因为“共享同一个类的对象也必须共享同样的方法”。但是,不能说Class有一个叫做“ method”的方法,因为无法使用"Class.method"调用该方法,而要说Class有一个实例方法“method”,这意味 着必须创建该类的实例对象,通过实例对象调用该方法。

Ruby中同样可以定义类方法,或者说类宏,定义方法时,在方法名前加“self.”或者“类名.”前缀即可, 然后可以在 类中像使用关键字一样使用该方法,依靠类宏,可以实现很多非常简洁的DSL。

类本身也是对象,所有实例对象上的规则,同样可以适用于类对象本身。

类的继承体系:

时间: 2024-11-03 14:57:34

Ruby元编程的白魔法书的相关文章

Ruby元编程之梦中情人method

  这篇文章主要介绍了Ruby元编程之梦中情人method_missing方法详解,本文讲解了我该怎么用 method_missing .方法代理.define_method.什么时候用 method_missing.元方法等内容,需要的朋友可以参考下 我最近读了些文章(比如这篇),宣传在 Ruby 里使用 method_missing 的. 很多人都与 method_missing 干柴烈火,但在并没有小心处理彼此之间的关系.所以,我想来探讨一下这个问题: ** 我该怎么用 method_mi

ruby元编程之创建自己的动态方法

  这篇文章主要介绍了ruby元编程之创建自己的动态方法,本文讲解使用method_missing和respond_to?创建自己的动态方法,需要的朋友可以参考下 method_missing是Ruby元编程(metaprogramming)常用的手法.基本思想是通过实现调用不存在的方法,以便进行回调.典型的例子是:ActiveRecord的动态查找(dynamic finder).例如:我们有email属性那么就可以调用User.find_by_email('joe@example.com')

Ruby元编程基础学习笔记整理_python

笔记一:代码中包含变量,类和方法,统称为语言构建(language construct). # test.rb class Greeting def initialize(text) @text = text end def welcome @text end end my_obj = Greeting.new("hello") puts my_obj.class puts my_obj.class.instance_methods(false) #false means not in

Ruby 元编程:第一部分

元编程就是编写能为你编写代码的代码.但那不就是代码生成器所做的事情吗,就像是 rails gem,或者 yeoman?或者甚至是字节码编译器? 是的,但元编程一般指的是 Ruby 中的另外一些东西.ruby 中的元编程指的是能为你动态地编写代码的代码.是在运行时发生的.Ruby 是动态元编程的首要语言,因为它采用了 类型推断 并且是强 发射的 – 相比现有的其它语言处在一个更高的级别.这能让你做一些像使用几行代码就可以加入大量功能这样事情,真的很酷,但是有一个问题:一个不小心,在你提升很多东西的

ruby元编程之创建自己的动态方法_ruby专题

method_missing是Ruby元编程(metaprogramming)常用的手法.基本思想是通过实现调用不存在的方法,以便进行回调.典型的例子是:ActiveRecord的动态查找(dynamic finder).例如:我们有email属性那么就可以调用User.find_by_email('joe@example.com'),虽然, ActiveRecord::Base并没有一个叫做find_by_email的方法. respond_to? 并不如method_missing出名,常用

ruby元编程实际使用实例_ruby专题

很喜欢ruby元编程,puppet和chef用到了很多ruby的语言特性,来定义一个新的部署语言. 分享几个在实际项目中用到的场景,能力有限,如果有更优方案,请留言给我:) rpc接口模板化--使用eval.alias.defind_method require 'rack/rpc' class Server < Rack::RPC::Server def hello_world "Hello, world!" end rpc 'hello_world' => :hello

Ruby元编程小结_ruby专题

今天被问到此类问题,以前总是觉得这个是比较宽泛的一个概念,自己即使是用过这些特性,但却一直不知道这叫"元编程" 直到今天被人问起的时候,方才顿悟一些,随后便在网上和自己的平实用的一些元编程做个小总结. 原来所谓的Ruby中的元编程,是可以在运行时动态的操作语言结构(如类.模块.实例变量等)的技术.你甚至于可以在不用重启的情况下,在运行时直接键入一段新的Ruby代码,并执行他.  Ruby的元编程,也具有"利用代码来编写代码"的作用.例如,常见的attr_access

Ruby元编程之梦中情人method_missing方法详解_ruby专题

我最近读了些文章(比如这篇),宣传在 Ruby 里使用 method_missing 的. 很多人都与 method_missing 干柴烈火,但在并没有小心处理彼此之间的关系.所以,我想来探讨一下这个问题: ** 我该怎么用 method_missing ** 什么时候该抵挡 method_missing 的诱惑 首先,永远不要在还没花时间考虑你用得够不够好之前,就向 method_missing 的魅力屈服.你知道,在日常生活中,很少会让你以为的那样亟需 method_missing: 日常

基于Ruby的元编程技术

元编程并不是一个很新的概念,通常元编程被认为是通过程序来生成程序,如果从这种意义上来考虑,那么lex和yacc以及JavaCC应该都可以算是具有了元编程的概念,在Java中,元编程得到了广泛的应用.但在Ruby中,元编程的使用变得相当的简单和容易实现,使用Ruby语言本身来产生Ruby代码,不需要借助外部的工具,著名的RoR框架就是建立在Ruby元编程的基础上的.可能你对元编程还没什么概念,但是Ruby已经内建了元编程这种机制,所以很有可能,你在不知不觉中就已经使用了Ruby元编程技术为你带来的