搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
Ruby元编程
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787560974583
  • 作      者:
    (意)Paolo Perrotta著
  • 出 版 社 :
    华中科技大学出版社
  • 出版日期:
    2012
收藏
编辑推荐
    实话实话,《Ruby元编程》有4大特点:
    1. 通过讲解实用案例对比Ruby与其他编程语言的差异,突显Ruby的优势。
    2. 举例分析常用Ruby代码库(比如Rails)的实现技巧,总结规律,让读者活学活用。
    3. 归纳总结Ruby编程的最佳实践经验和方法,提出Ruby编程的设计模式。
    4. 作者口水比较重,译本尽量保持原著风格,介意者惕入。
展开
作者简介
    Paolo Perrotta有超过10年的软件设计和开发经验,发表过上百篇技术文章。他用过Java、C++、C#编程,最后爱上了Ruby。他是较早接受敏捷方法的实践者,在Yoox(一家大型互联网时尚公司)从事管理敏捷团队的工作。他还在欧洲各国教授编程培训课。目前他和女友(还有一只猫)住在意大利,专心钻研Ruby。
展开
内容介绍
    《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开列出发挥其优势的技巧和常用的Ruby设计模式。Ruby之父松本行弘作序推荐。
展开
精彩书评
    Ruby的很多特性继承自其他语言,这些语言包括Lisp、Smalltalk、C、Perl等。其元编程特性来自于Lisp(以及Smalltalk)。元编程看起来有点像魔术,功能强大。但是你必须牢记:能力越大,责任越大。享受Ruby编程吧。
    ——松本行弘 Ruby之父
展开
精彩书摘
    元编程程序员Bob的故事
    The Story of Bob, Metaprogrammer
    Bob是一个Java程序员,他刚刚开始学习Ruby,他有一个宏伟的计划:他要为电影迷开发一个世界上最大的因特网社交网络系统。要实现这个计划,他需要一个包含电影和影评的数据库。Bob希望用它来练习编写可重用的代码,因此他决定创建一个简单的库来把对象持久化到数据库中。
    Bob的第一次尝试
    Bob的库把数据库中的每个表映射到一个类中,而每条记录则映射到一个对象中。当Bob创建一个对象或访问它的属性时,这个对象会产生一条SQL语句并发送给数据库。所有这些都包装在一个基类中,代码如下:
    introduction/orm.rb
    class Entity
    attr_reader :table, :ident
    def initialize(table, ident)
    @table = table
    @ident = ident
    Database.sql "INSERT INTO #{@table} (id) VALUES (#{@ident})"
    end
    def set(col, val)
    Database.sql "UPDATE #{@table} SET #{col}='#{val}' WHERE id=#{@ident}"
    end
    def get(col)
    Database.sql("SELECT #{col} FROM #{@table} WHERE id=#{@ident}")[0][0]
    end
    end
    在Bob的数据库里,每个表都有一个id字段。每个Entity会保存这个字段的内容及它引用的表名。当Bob创建一个Entity对象时,这个对象会把它自身保存在数据库中。Entity#set()方法会创建SQL语句来更新一个字段的值,而Entity#get()方法会创建SQL语句读取一个字段的值。(万一你感兴趣,Bob的Database类用数组的数组作为返回的数据集。)
    Bob可以继承Entity类来映射一个特定的类。例如,Movie类可以用来映射一个名为movies的表:
    class Movie  "Doctor Strangelove"
    上面的代码首先创建了一个Movie对象,并包装了movies表中的一条记录。可通过Movie#title()和Movie#title=()方法访问title字段,但是这些方法在源代码中无迹可查。如果它们根本没有定义过,title()和title=()怎么能存在呢?可以从ActiveRecord的工作方式中找到答案。
    表名部分很直接:ActiveRecord通过内省机制查看类的名字,然后根据某
    种简单的习惯即可得到表名。因为类名是Movie,所以ActiveRecord会把它映射到名为movies的表中。(这个库知道怎么处理英语单词的复数。)
    那些像title()和title=()这样访问属性的方法(简称为访问器)是怎样处理的呢?这就是元编程发挥作用的地方:Bob无须编写那些方法。从表的模式中得到字段名后,ActiveRecord会自动定义这些方法。ActiveRecord::Base会在运行时读取数据库模式,如果发现movies表有两个名为title和director的字段,就通过定义访问器创建两个同名属性。这意味着ActiveRecord在程序运行时无中生有地创建了诸如Movie#title()和Movie#director=()这样的方法!
    相对于内省的“阴”,这就是它的“阳”:不仅可以读出语言构件,还可以写入它们。如果认为这个特性非常有用,那么你是对的。
    再谈“元”
    现在,你可以得到一个更加正式的元编程定义:
    元编程是编写在运行时操纵语言构件的代码。
    ActiveRecord的作者是怎样应用这个概念的?他不是为每个类的属性编写访问器方法,而是编写代码为每个继承自ActiveRecord::Base的类在运行时定义方法。这就是“编写代码的代码”时所指的东西。
    你也许会认为这只是一个孤例,但是,如果看看Ruby(正如马上会做的),你会发现它们无处不在。
    元编程和Ruby
    Metaprogamming and Ruby
    还记得早先讨论的鬼城和自由市场么?如果你希望“操纵语言构件”,那么那些构件必须在运行时存在。下面快速看看几种语言在运行时能给你多少控制权。
    一个用C语言写的程序会跨越两个不同的世界:编译时和运行时。在编译时,可以拥有像变量和函数这样的语言构件;而在运行时,只有一大堆机器码。由于绝大多数编译时的信息在运行时都丢失了,所以C语言不支持元编程或内省。在C++语言中,一些语言构件可以在编译后生存下来,这也是为什么你可以向C++对象询问它的类的原因。在Java语言中,编译时和运行时的界线甚至更加模糊,你有足够的内省能力来列出一个类的方法,或者一直向上查询其超类链。
    Ruby无疑是现今流行语言中对元编程最友好的一种语言。没有编译时,Ruby程序中所有的语言构件在运行时可用。在运行一个程序时,无须翻过一道横亘在所写程序与所运行程序中间的墙。这里只有一个世界。
    在这个世界中,元编程无处不在。事实上,元编程如此深入Ruby语言,甚至无法和“普通”编程明确区分开来。你无法看着一段Ruby代码说,“这部分是元编程,而其他部分不是。”从某种程度上说,元编程不过是每个Ruby程序员的例行工作。
    为明确起见,元编程并不是Ruby高手的抽象艺术,它也不只是创建像ActiveRecord这种复杂东西的利器。如果你要通向Ruby的高级编程之路,就会在每一步上看到元编程的身影。即使满足于目前你所学的Ruby知识,也很可能会在编程之旅中被元编程绊倒:可能是在某个流行框架的源代码中,也可能是在某个喜欢的类库中,甚至是从某个博客上看到的小例子。除非掌握了元编程,否则你不会拥有Ruby语言全部的战斗力。
    学习元编程,还有一种也许不那么明显的原因。尽管Ruby第一眼看上去很简单,但很快会被它的精妙细微所打击。迟早你会问自己一些问题,比如“一个对象可以调用同属一个类的其他对象的私有方法么?”或者“可以通过导入一个模块来创建类方法么?”最终,这些看起来复杂的行为实际上都是基
    于非常简单的原则。通过元编程,你会对这门语言更熟悉;通过学习这些规则,你会找到这些问题的答案。
    如果你已经知道元编程是干什么的了,就表明已经做好阅读本书正文的准备了
    ……
展开
目录
前言 vii
致谢 ix
引言 xi
“元”这个字眼 xii
关于本书 xix
关于你 xxii

第1部分  Ruby元编程
第1章  星期一:对象模型
1.1  跟Bill在一起的星期一
1.2  打开类
1.3  类的真相
1.4  小测验:缺失的连接线
1.5  调用一个方法时发生了什么
1.6  小测验:混乱的模块
1.7  对象模型小结
第2章  星期二:方法
2.1  一个重复代码的问题
2.2  动态方法
2.3  method_missing()方法
2.4  小测验:狩猎Bug
2.5  关于method_missing()方法的更多内容
第3章  星期三:代码块
3.1  怎样度过驼峰日
3.2  小测验:Ruby的#符号
3.3  闭包
3.4  instance_eval()
3.5  可调用对象
3.6  编写一种领域专属语言
3.7  小测验:更好的领域专属语言
第4章  星期四:类定义
4.1  类定义揭秘
4.2  小测验:Taboo类
4.3  单件方法
4.4  Eigenclass
4.5  小测验:模块的麻烦
4.6  别名
4.7  小测验:打破数学规律
第5章  星期五:编写代码的代码
5.1  带路
5.2  Kernel#eval
5.3  小测验:校验过的属性(第一步)
5.4  小测验:校验过的属性(第二步)
5.5  小测验:校验过的属性(第三步)
5.6  小测验:校验过的属性(第四步)
5.7  钩子方法
5.8  小测验:校验过的属性(第五步)
第6章  尾声

第2部分“Rails中的元编程”
第7章  ActiveRecord的设计
7.1  准备旅程
7.2  ActiveRecord的设计
7.3  经验教训
第8章  深入ActiveRecord
8.1  动态属性
8.2  动态查找器
8.3  经验教训
第9章  安全元编程
9.1  元编程的测试
9.2  化解猴子补丁
9.3  经验教训

第三部分  附录
附录A  常见惯用法
A.1  拟态方法
A.2  空指针保护
A.3  关于方法参数的技巧
A.4  Self Yield
A.5  Symbol#to_proc()方法
附录B  领域专属语言
B.1  关于领域专属语言
B.2  内部和外部领域专属语言
B.3  领域专属语言和元编程
附录C  法术手册
C.1  法术集
附录D  参考书目
索引
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证