第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-Relational Mapper,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
· · · · · · (
收起)