《The Ruby Way 第2版 中文版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美) Hal Fulton著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2007
  • ISBN:7115166692
  • 页数:532 页
图书介绍:本书采用“如何解决问题”的方式阐述Ruby编程,涵盖了以下内容:Ruby术语和基本原理;数字、字符串等低级数据类型的操作;正则表达式;国际化和Ruby消息目录;散列、数组及栈、树和图等其他数据结构的操作;I/O、文件和对象持久化;Ruby特有的OOP技术及动态编程;Tk、GTK+、Fox和Qt等Ruby图形用户界面;使用Ruby线程实现轻量级多任务;使用Ruby编写脚本和进行系统管理;使用图像文件、PDF、YAML、XML、RSS和Atom;Ruby代码的测试、调试、性能分析和打包;低级网络编程和客户/服务器交互;Rails、Nitro、Wee、IOWA等Web开发工具;使用分布式Ruby、Rinda和Ring。书中包含400多个按主题分类的示例,每个示例都回答了“如何使用Ruby来完成”的问题。首先对要完成的任务进行了描述,并讨论技术方面的约束条件;然后循序渐进地阐述一种优秀的解决方案,并辅以说明和解释以帮助读者理解。

第1章 Ruby概述 1

1.1 面向对象简介 2

1.1.1 什么是对象 2

1.1.2 继承 3

1.1.3 多态 4

1.1.4 其他术语 5

1.2 基本的Ruby语法和语义 5

1.2.1 关键字和标识符 6

1.2.2 注释和内嵌文档 7

1.2.3 常量、变量和类型 7

1.2.4 运算符及其优先级 8

1.2.5 示例程序 9

1.2.6 循环和分支 11

1.2.7 异常 15

1.3 Ruby中的OOP 16

1.3.1 对象 17

1.3.2 内置类 17

1.3.3 模块和Mixin 18

1.3.4 创建类 19

1.3.5 方法和属性 22

1.4 Ruby的动态方面 23

1.4.1 在运行时编码 23

1.4.2 反射 25

1.4.3 方法找不到 26

1.4.4 垃圾回收(Garbage Collection,GC) 26

1.5 直觉训练:需要记住的内容 26

1.5.1 语法问题 27

1.5.2 编程方面 28

1.5.3 Ruby的case语句 30

1.5.4 Ruby程序员及其习惯用语 32

1.5.5 面向表达式和其他问题 37

1.6 Ruby术语 38

1.7 结语 40

第2章 使用字符串 41

2.1 表示普通字符串 41

2.2 用其他表示法表示字符串 42

2.3 使用Here文档 42

2.4 确定字符串的长度 44

2.5 每次处理一行 44

2.6 每次处理一个字节 44

2.7 执行特殊的字符串比较 45

2.8 将字符串分解为标记 46

2.9 格式化字符串 47

2.10 将字符串用做IO对象 48

2.11 控制大小写 48

2.12 获取和设置子字符串 49

2.13 字符串替换 50

2.14 字符串搜索 51

2.15 在字符和ASCII码之间转换 52

2.16 隐式转换和显式转换 52

2.17 在字符串末尾添加内容 54

2.18 删除末尾的换行符和其他字符 54

2.19 删除字符串中的空白 55

2.20 重复字符串 55

2.21 在字符串中嵌入表达式 55

2.22 字符串的延迟插入 56

2.23 解析逗号分隔的数据 56

2.24 将字符串转换为数字(十进制数和其他进制) 57

2.25 rot13文本编码和解码 58

2.26 字符串加密 59

2.27 字符串压缩 60

2.28 计算字符串中的字符数 60

2.29 字符串反转 61

2.30 删除重复的字符 61

2.31 删除指定的字符 61

2.32 打印特殊字符 62

2.33 生成后续字符串 62

2.34 计算32位的CRC 62

2.35 计算字符串的MD5散列值 63

2.36 计算两个字符串之间的Levenshtein距离 64

2.37 base64字符串的编码和解码 65

2.38 字符串编码和解码(uuencode/uudecode) 66

2.39 扩展和压缩制表符 66

2.40 文本自动换行 67

2.41 结语 67

第3章 使用正则表达式 68

3.1 正则表达式的语法 68

3.2 编辑正则表达式 70

3.3 特殊字符的转义 71

3.4 使用锚 71

3.5 使用量词符(quantifier) 72

3.6 正负预查(Lookahead) 73

3.7 访问后向引用 74

3.8 使用字符类 76

3.9 扩展正则表达式 77

3.10 使用点匹配换行符 78

3.11 使用内嵌选项 78

3.12 使用内嵌子表达式 79

3.13 Ruby与Oniguruma 79

3.13.1 检测是否有Oniguruma 80

3.13.2 编译Oniguruma 80

3.13.3 Oniguruma的一些新特性 81

3.13.4 正负后查(Lookbehind) 82

3.13.5 再谈量词符 82

3.13.6 命名匹配 83

3.13.7 正则表达式中的递归 84

3.14 一些正则表达式示例 85

3.14.1 匹配IP地址 85

3.14.2 匹配关键字—值对 86

3.14.3 匹配罗马数字 86

3.14.4 匹配数值常量 87

3.14.5 匹配日期/时间字符串 87

3.14.6 检测文本中的双词 88

3.14.7 匹配全部大写的单词 88

3.14.8 匹配版本号 88

3.14.9 其他模式 88

3.15 结语 89

第4章 Ruby的国际化 90

4.1 背景与术语 91

4.2 后ASCII时代的编码 93

4.2.1 jcode库与$KCODE 94

4.2.2 再谈常用的字符串和正则表达式操作 95

4.2.3 检测字符编码 98

4.2.4 Unicode字符的规范化 98

4.2.5 字符串排序的问题 99

4.2.6 编码之间的转换 101

4.3 使用消息目录 103

4.3.1 背景与术语 103

4.3.2 开始使用消息目录 104

4.3.3 简单应用程序的本地化 104

4.3.4 其他注意事项 108

4.4 结语 108

第5章 执行数值计算 109

5.1 在Ruby中表示数值 109

5.2 基本数字运算 110

5.3 对浮点数执行舍入 110

5.4 比较浮点数 112

5.5 格式化输出的数值 113

5.6 用逗号格式化数值 113

5.7 使用超大型整数 114

5.8 使用BigDecimal 114

5.9 处理有理数 116

5.10 矩阵运算 116

5.11 处理复数 119

5.12 使用mathn 120

5.13 因子分解、最大公约数和最小公倍数 121

5.14 处理素数 121

5.15 隐式与显式数值转换 122

5.16 数值的协同转换(coercing) 123

5.17 对数值执行按位运算 124

5.18 执行进制转换 125

5.19 计算立方根、四次方根等 125

5.20 确定体系结构的字节顺序 126

5.21 定积分的数值计算 127

5.22 以度、弧度、分度为单位的三角计算 127

5.23 高级三角函数 128

5.24 计算以任何数为底的对数 128

5.25 计算数据集的均值、中值和众数 129

5.26 方差和标准差 130

5.27 计算相关系数 130

5.28 生成随机数 132

5.29 使用memoize缓存函数结果 132

5.30 结语 133

第6章 符号和范围 134

6.1 符号 134

6.1.1 作为枚举的符号 135

6.1.2 作为元值(metavalue)的符号 136

6.1.3 符号、变量和方法 136

6.1.4 符号的转换 137

6.2 范围 138

6.2.1 开范围和闭范围 138

6.2.2 查找终点 138

6.2.3 对范围进行迭代 139

6.2.4 测试是否在范围内 139

6.2.5 转换为数组 140

6.2.6 反向范围 140

6.2.7 flip-flop运算符 140

6.2.8 自定义的范围 143

6.3 结语 145

第7章 处理时间和日期 146

7.1 确定当前时间 146

7.2 处理特定的时间(纪元后) 147

7.3 确定星期几 148

7.4 确定复活节的日期 148

7.5 计算一个月内的第几个星期几 149

7.6 秒与更大时间单位之间的转换 150

7.7 其他时间和纪元之间的转换 150

7.8 不要使用闰秒 151

7.9 计算一年中的第几天 151

7.10 验证日期/时间 151

7.11 计算一年的第几周 152

7.12 检测闰年 153

7.13 获得时区 153

7.14 只使用小时与分钟 154

7.15 比较日期/时间值 154

7.16 给日期/时间值增加间隔 154

7.17 计算两个日期/时间值的差 155

7.18 处理特定的日期(纪元前) 155

7.19 Time、Date、DateTime之间的转换 155

7.20 从字符串中提取日期/时间值 156

7.21 日期/时间值的格式化和输出 157

7.22 时区转换 158

7.23 计算一个月的天数 158

7.24 将月划分为周 159

7.25 结语 160

第8章 数组、散列及其他枚举类型 161

8.1 使用数组 161

8.1.1 数组的创建和初始化 162

8.1.2 数组元素的访问和赋值 162

8.1.3 确定数组的长度 163

8.1.4 数组的比较 163

8.1.5 数组的排序 165

8.1.6 根据条件从数组中选择 167

8.1.7 使用专门的索引函数 168

8.1.8 实现稀疏矩阵 169

8.1.9 使用数组作为数学集合 170

8.1.10 数组的随机化 173

8.1.11 使用多维数组 173

8.1.12 找出在一个数组中而不在另一个数组中的元素 174

8.1.13 数组的变换或映射 174

8.1.14 删除数组中的nil元素 175

8.1.15 删除特定的数组元素 175

8.1.16 数组的拼接和附加 176

8.1.17 将数组用做栈或队列 177

8.1.18 对数组进行迭代 177

8.1.19 插入分隔符以形成字符串 178

8.1.20 颠倒数组 178

8.1.21 删除数组中的重复元素 178

8.1.22 数组的交织 178

8.1.23 计算数组中值的频率 179

8.1.24 将数组颠倒为散列 179

8.1.25 同步多个数组的排序 179

8.1.26 给新数组元素指定默认值 180

8.2 使用散列 181

8.2.1 创建新散列 181

8.2.2 指定散列的默认值 182

8.2.3 访问和添加键—值对 182

8.2.4 删除键—值对 183

8.2.5 对散列进行迭代 184

8.2.6 散列的颠倒 184

8.2.7 检测散列中的键和值 184

8.2.8 将散列提取为数组 185

8.2.9 根据条件选择键—值对 185

8.2.10 散列的排序 186

8.2.11 合并两个散列 186

8.2.12 从数组创建散列 186

8.2.13 计算散列键的差集和交集 187

8.2.14 将散列用做稀疏矩阵 187

8.2.15 实现包含重复键的散列 187

8.3 枚举概述 190

8.3.1 inject方法 190

8.3.2 使用量词符 191

8.3.3 partition方法 192

8.3.4 分组迭代 193

8.3.5 转换为数组或集合 193

8.3.6 使用Enumerator对象 194

8.3.7 使用Generator对象 195

8.4 结语 196

第9章 高级数据结构 197

9.1 使用集合 197

9.1.1 简单的集合操作 198

9.1.2 高级集合操作 199

9.2 使用栈和队列 200

9.2.1 实现严谨的栈 200

9.2.2 检测表达式中不配对的标点 201

9.2.3 理解栈和递归 202

9.2.4 实现严谨的队列 203

9.3 使用树 204

9.3.1 实现二叉树 204

9.3.2 使用二叉树排序 206

9.3.3 将二叉树用做查询表 207

9.3.4 将树转换为字符串或数组 207

9.4 使用图 208

9.4.1 使用邻接矩阵实现图 209

9.4.2 确定图是否全连通 211

9.4.3 检测图是否包含欧拉回路 212

9.4.4 判断图是否有欧拉路径 212

9.4.5 Ruby中的图工具 213

9.5 结语 213

第10章 I/O和数据存储 214

10.1 处理文件和目录 215

10.1.1 打开和关闭文件 215

10.1.2 更新文件 216

10.1.3 文件的追加 216

10.1.4 随机存取文件 216

10.1.5 处理二进制文件 217

10.1.6 锁定文件 218

10.1.7 执行简单的I/O操作 219

10.1.8 执行缓冲I/O和非缓冲I/O操作 220

10.1.9 操作文件所有者和权限 220

10.1.10 获取和设置时间戳信息 222

10.1.11 检查文件是否存在及其大小 223

10.1.12 检查特殊的文件属性 223

10.1.13 使用管道 225

10.1.14 执行特殊的I/O操作 226

10.1.15 使用非阻断I/O 226

10.1.16 使用readpartial 227

10.1.17 操作路径名 227

10.1.18 使用Pathname类 228

10.1.19 命令级文件操作 229

10.1.20 从键盘抓取字符 230

10.1.21 将整个文件读取到内存中 230

10.1.22 逐行对文件进行迭代 231

10.1.23 逐字节对文件进行迭代 231

10.1.24 将字符串视为文件 231

10.1.25 读取程序内嵌的数据 232

10.1.26 读取程序的源代码 233

10.1.27 处理临时文件 233

10.1.28 改变和设置当前目录 233

10.1.29 改变当前根目录 234

10.1.30 迭代目录项 234

10.1.31 获取目录项列表 234

10.1.32 创建目录链 234

10.1.33 递归地删除目录 235

10.1.34 查找文件和目录 235

10.2 执行高级数据访问 236

10.2.1 简单序列化 236

10.2.2 更复杂的序列化 237

10.2.3 使用Marshal执行有限的“深拷贝” 238

10.2.4 使用Pstore执行更好的对象持久化 238

10.2.5 处理CSV数据 239

10.2.6 使用YAML进行序列化 241

10.2.7 使用Madeleine进行对象的Prevalence 242

10.2.8 使用DBM库 243

10.3 使用KirbyBase 243

10.4 连接到外部数据库 246

10.4.1 连接到SQLite 246

10.4.2 连接到MySQL 247

10.4.3 连接到PostgreSQL 249

10.4.4 连接到LDAP 251

10.4.5 连接到Oracle 252

10.4.6 使用DBI封装类 253

10.4.7 对象关系映射器(Object-RelationalMapper,ORM) 254

10.5 结语 255

第11章 Ruby的OOP与动态特性 256

11.1 日常OOP任务 256

11.1.1 使用多个构造函数 257

11.1.2 创建实例属性 257

11.1.3 使用更精美的构造函数 258

11.1.4 创建类级属性和方法 259

11.1.5 继承超类 262

11.1.6 测试对象所属的类 264

11.1.7 判断对象的相等性 266

11.1.8 控制对方法的访问 267

11.1.9 复制对象 268

11.1.10 使用initialize_copy 269

11.1.11 理解allocate 270

11.1.12 处理模块 270

11.1.13 对象的变换或转换 273

11.1.14 创建只包含数据的类(Struct) 275

11.1.15 冻结对象 276

11.2 高级技巧 277

11.2.1 向对象发送显式消息 277

11.2.2 对象的特殊化 278

11.2.3 类和模块的嵌套 281

11.2.4 创建参数化类 282

11.2.5 使用继续来实现生成器 284

11.2.6 将代码存储为对象 286

11.2.7 模块包含的工作原理 287

11.2.8 检测默认参数 288

11.2.9 委托或转交 289

11.2.10 自动定义类级Reader与Writer 290

11.2.11 使用高级编程准则 291

11.3 使用动态特性 293

11.3.1 动态地执行代码 293

11.3.2 使用const get 294

11.3.3 根据名称动态地实例化类 294

11.3.4 获取和设置实例变量 295

11.3.5 使用define method 296

11.3.6 使用const_missing 298

11.3.7 删除定义 299

11.3.8 获取已定义的实体列表 301

11.3.9 查看调用栈 303

11.3.10 监视程序的执行 303

11.3.11 遍历对象空间 304

11.3.12 处理对不存在的方法的调用 305

11.3.13 跟踪类或对象定义的变更 305

11.3.14 定义对象的finalizer 308

11.4 结语 309

第12章 Ruby的图形界面 310

12.1 Ruby/Tk 310

12.1.1 概述 311

12.1.2 一个简单的窗口应用程序 312

12.1.3 使用按钮 313

12.1.4 使用文本框 315

12.1.5 使用其他窗口部件 318

12.1.6 其他说明 320

12.2 Ruby/GTK2 321

12.2.1 概述 321

12.2.2 一个简单的窗口应用程序 322

12.2.3 使用按钮 323

12.2.4 使用文本框 324

12.2.5 使用其他窗口部件 326

12.2.6 其他说明 329

12.3 FXRuby(FOX) 331

12.3.1 概述 331

12.3.2 一个简单的窗口应用程序 332

12.3.3 使用按钮 333

12.3.4 使用文本框 334

12.3.5 使用其他窗口部件 335

12.3.6 其他说明 342

12.4 QtRuby 342

12.4.1 概述 343

12.4.2 一个简单的窗口应用程序 343

12.4.3 使用按钮 344

12.4.4 使用文本框 345

12.4.5 使用其他窗口部件 346

12.4.6 其他说明 350

12.5 其他GUI工具包 351

12.5.1 Ruby和X 351

12.5.2 Ruby和wxWidgets 351

12.5.3 Apollo(Ruby和Delphi) 351

12.5.4Ruby与Windows API 352

12.6 结语 352

第13章 Ruby中的线程 353

13.1 创建和操控线程 353

13.1.1 创建线程 354

13.1.2 访问线程的局部变量 354

13.1.3 查询和修改线程状态 356

13.1.4 实现会合点并拦截返回值 358

13.1.5 处理异常 359

13.1.6 使用线程组 360

13.2 同步线程 361

13.2.1 使用临界区执行简单同步 362

13.2.2 同步对资源的访问(mutex.rb) 363

13.2.3 使用预定义的同步队列类 366

13.2.4 使用条件变量 367

13.2.5 使用其他同步技术 368

13.2.6 允许操作超时 370

13.2.7 等待事件发生 371

13.2.8 在I/O期间继续处理 372

13.2.9 实现并行迭代器 373

13.2.10 并行地递归删除 374

13.3 结语 375

第14章 脚本编程与系统管理 376

14.1 运行外部程序 376

14.1.1 使用system和exec 376

14.1.2 命令输出替换 377

14.1.3 操作进程 378

14.1.4 操作标准输入/输出 380

14.2 命令行选项和参数 380

14.2.1 命令行选项的解析 381

14.2.2 使用ARGF 382

14.2.3 使用ARGV 383

14.3 Shell库 383

14.3.1 使用Shell进行I/O重定向 383

14.3.2 有关shell.rb的其他说明 385

14.4 访问环境变量 385

14.4.1 获取和设置环境变量 386

14.4.2 将环境变量存储为数组或散列 386

14.4.3 将环境变量作为全局变量导入 387

14.5 Microsoft Windows脚本编程 387

14.5.1 使用Win32API 388

14.5.2 使用Win32OLE 388

14.5.3 使用ActiveScriptRuby 391

14.6 Windows One-Click安装程序 392

14.7 需要知道的库 393

14.8 使用文件、目录和树 393

14.8.1 文本过滤器简介 394

14.8.2 复制包含符号链接的目录树 394

14.8.3 根据创建日期或其他条件删除文件 395

14.8.4 确定可用磁盘空间 396

14.9 其他脚本编程任务 397

14.9.1 单文件Ruby解决方案 397

14.9.2 在Ruby解释器中使用管道 398

14.9.3 获取和设置退出编码 399

14.9.4 检测程序是否以交互方式运行 399

14.9.5 确定当前平台或操作系统 399

14.9.6 使用Etc模块 400

14.10 结语 400

第15章 Ruby和数据格式 401

15.1 使用REXML解析XML 401

15.1.1 树的解析 402

15.1.2 解析流 403

15.1.3 XPath及其他 404

15.2 使用RSS和Atom 405

15.2.1 rss标准库 405

15.2.2 feedtools库 407

15.3 使用RMagick操作图像数据 408

15.3.1 常见的图形任务 408

15.3.2 特效和变换 411

15.3.3 绘图API 414

15.4 使用PDF∷Writer创建PDF文档 416

15.4.1 基本概念和技巧 416

15.4.2 一个示例文档 418

15.5 结语 424

第16章 测试和调试 425

16.1 使用Test∷Unit进行测试 425

16.2 ZenTest工具 428

16.3 使用Ruby调试器 431

16.4 将irb用做调试器 434

16.5 度量代码覆盖率 435

16.6 度量性能 435

16.7 对象的完美输出(Prettyprinting) 439

16.8 结语 440

第17章 代码的打包和分发 441

17.1 使用RDoc 441

17.1.1 简单标记 443

17.1.2 高级格式化 445

17.2 安装和打包 445

17.2.1 setup.rb 446

17.2.2 RubyGem 447

17.3 RubyForge和RAA 448

17.4 结语 449

第18章 网络编程 450

18.1 网络服务器 451

18.1.1 一个简单服务器:时间 451

18.1.2 实现多线程服务器 453

18.1.3 案例分析:对等象棋服务器 453

18.2 网络客户端 459

18.2.1 从Web获取真正的随机数 459

18.2.2 连接到官方的时间服务器 462

18.2.3 与POP服务器交互 462

18.2.4 使用SMTP发送邮件 464

18.2.5 与IMAP服务器交互 466

18.2.6 附件的编码和解码 467

18.2.7 案例分析:邮件—新闻网关(Mail-News Gateway) 469

18.2.8 根据URL获取网页 473

18.2.9 使用Open-URI库 474

18.3 结语 474

第19章 Ruby与Web应用程序 475

19.1 使用Ruby进行CGI编程 475

19.1.1 cgi.rb库简介 476

19.1.2 显示和处理表单 477

19.1.3 使用Cookie 478

19.1.4 使用用户会话 478

19.2 使用FastCGI 479

19.3 Ruby on Rails 481

19.3.1 原理和技术 481

19.3.2 Rails应用程序的测试与调试 482

19.3.3 核心扩展 483

19.3.4 相关的工具和库 484

19.4 使用Nitro进行Web开发 484

19.4.1 创建基本的Nitro应用程序 484

19.4.2 Nitro和MVC模式 486

19.4.3 Nitro和Og 489

19.4.4 Nitro中常见的Web开发任务 490

19.4.5 其他重要的细节 492

19.5 Wee简介 494

19.5.1 一个简单的例子 494

19.5.2 将状态与URL关联起来 495

19.6 使用IOWA进行Web开发 496

19.6.1 基本的IOWA概念 496

19.6.2 IOWA中的模板 498

19.6.3 组件控制权转移 499

19.7 Ruby和Web服务器 500

19.7.1 使用mod ruby 500

19.7.2 使用erb 501

19.7.3 使用WEBrick 503

19.7.4 使用Mongrel 505

19.8 结语 506

第20章 分布式Ruby 507

20.1 概述:使用drb 507

20.2 案例分析:股票机模拟程序 509

20.3 Rinda:一种Ruby元组空间 512

20.4 分布式Ruby中的服务发现 515

20.5 结语 516

第21章 Ruby开发工具 517

21.1 使用RubyGems 517

21.2 使用rake 519

21.3 使用irb 521

21.4 ri工具 525

21.5 编辑器支持 526

21.6 集成开发环境 527

21.7 结语 528

第22章 Ruby社区 529

22.1 Web资源 529

22.2 新闻组和邮件列表 529

22.3 博客和在线杂志 530

22.4 Ruby修订请求 530

22.5 IRC频道 531

22.6 Ruby大会 531

22.7 本地的Ruby用户组 532

22.8 结语 532