Ruby元编程(松本行弘作序推荐)
基本信息
- 作者: Paolo Perrotta [作译者介绍]
- 出版社:华中科技大学出版社
- ISBN:9787560974583
- 上架时间:2011-12-29
- 出版日期:2012 年1月
- 开本:16开
- 页码:288
- 版次:1-1
- 所属分类:
计算机 > 软件与程序设计 > Rails/Ruby
编辑推荐
实话实话,《Ruby元编程》有如下特点:1. 通过讲解实用案例对比Ruby与其他编程语言的差异,突显Ruby的优势。2. 举例分析常用Ruby代码库(比如Rails)的实现技巧,总结规律,让读者活学活用。3. 归纳总结Ruby编程的最佳实践经验和方法,提出Ruby编程的设计模式。
4. 作者口水比较重,译本尽量保持原著风格,介意者惕入。
内容简介回到顶部↑
《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开列出发挥其优势的技巧和常用的Ruby设计模式。Ruby之父松本行弘作序推荐。
作译者回到顶部↑
本书提供作译者介绍
aoloerrotta有超过10年的软件设计和开发经验,发表过上百篇技术文章。他用过Java、C++、C#编程,最后爱上了Ruby。他是较早接受敏捷方法的实践者,在Yoox(一家大型互联网时尚公司)从事管理敏捷团队的工作。他还在欧洲各国教授编程培训课。目前他和女友(还有一只猫)住在意大利,专心钻研Ruby。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
前言 vii致谢 ix引言 xi“元”这个字眼 xii关于本书 xix关于你 xxii第1部分 ruby元编程 1第1章 星期一:对象模型 31.1 跟bill在一起的星期一 31.2 打开类 41.3 类的真相 91.4 小测验:缺失的连接线 211.5 调用一个方法时发生了什么 231.6 小测验:混乱的模块 321.7 对象模型小结 35第2章 星期二:方法 372.1 一个重复代码的问题 382.2 动态方法 402.3 method_missing()方法 482.4 小测验:狩猎bug 592.5 关于method_missing()方法的更多内容 61第3章 星期三:代码块 693.1 怎样度过驼峰日 703.2 小测验:ruby的#符号 713.3 闭包 743.4 instance_eval() 83
3.5 可调用对象 863.6 编写一种领域专属语言 943.7 小测验:更好的领域专属语言 96第4章 星期四:类定义 1014.1 类定义揭秘 1024.2 小测验:taboo类 1094.3 单件方法 1104.4 eigenclass 1164.5 小测验:模块的麻烦 1294.6 别名 1314.7 小测验:打破数学规律 135第5章 星期五:编写代码的代码 1395.1 带路 1395.2 kernel#eval 1425.3 小测验:校验过的属性(第一步) 1525.4 小测验:校验过的属性(第二步) 1555.5 小测验:校验过的属性(第三步) 1575.6 小测验:校验过的属性(第四步) 1585.7 钩子方法 1595.8 小测验:校验过的属性(第五步) 165第6章 尾声 167第2部分“rails中的元编程” 169第7章 activerecord的设计 1717.1 准备旅程 1727.2 activerecord的设计 1747.3 经验教训 183第8章 深入activerecord 1878.1 动态属性 1878.2 动态查找器 1958.3 经验教训 200第9章 安全元编程 2059.1 元编程的测试 2059.2 化解猴子补丁 2139.3 经验教训 218第三部分 附录 221附录a 常见惯用法 223a.1 拟态方法 223a.2 空指针保护 226a.3 关于方法参数的技巧 227a.4 self yield 231a.5 symbol#to_roc()方法 232附录b 领域专属语言 235b.1 关于领域专属语言 235b.2 内部和外部领域专属语言 237b.3 领域专属语言和元编程 238附录c 法术手册 239c.1 法术集 239附录d 参考书目 251索引 253
3.5 可调用对象 863.6 编写一种领域专属语言 943.7 小测验:更好的领域专属语言 96第4章 星期四:类定义 1014.1 类定义揭秘 1024.2 小测验:taboo类 1094.3 单件方法 1104.4 eigenclass 1164.5 小测验:模块的麻烦 1294.6 别名 1314.7 小测验:打破数学规律 135第5章 星期五:编写代码的代码 1395.1 带路 1395.2 kernel#eval 1425.3 小测验:校验过的属性(第一步) 1525.4 小测验:校验过的属性(第二步) 1555.5 小测验:校验过的属性(第三步) 1575.6 小测验:校验过的属性(第四步) 1585.7 钩子方法 1595.8 小测验:校验过的属性(第五步) 165第6章 尾声 167第2部分“rails中的元编程” 169第7章 activerecord的设计 1717.1 准备旅程 1727.2 activerecord的设计 1747.3 经验教训 183第8章 深入activerecord 1878.1 动态属性 1878.2 动态查找器 1958.3 经验教训 200第9章 安全元编程 2059.1 元编程的测试 2059.2 化解猴子补丁 2139.3 经验教训 218第三部分 附录 221附录a 常见惯用法 223a.1 拟态方法 223a.2 空指针保护 226a.3 关于方法参数的技巧 227a.4 self yield 231a.5 symbol#to_roc()方法 232附录b 领域专属语言 235b.1 关于领域专属语言 235b.2 内部和外部领域专属语言 237b.3 领域专属语言和元编程 238附录c 法术手册 239c.1 法术集 239附录d 参考书目 251索引 253
媒体评论回到顶部↑
Ruby的很多特性继承自其他语言,这些语言包括Lis、Smalltalk、C、erl等。其元编程特性来自于Lis(以及Smalltalk)。元编程看起来有点像魔术,功能强大。但是你必须牢记:能力越大,责任越大。享受Ruby编程吧。——松本行弘 Ruby之父
书摘回到顶部↑
元编程程序员Bob的故事
The Story of Bob, Metarogrammer
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 “UDATE #{@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类用数组的数组作为返回的数据集。)
The Story of Bob, Metarogrammer
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 “UDATE #{@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类用数组的数组作为返回的数据集。)







点击看大图

加载中...
