這是一本深受好評的書。它不僅是一本純Ruby的書,也不僅是一本純Rails的書,而是一本為Rails程序員"優化"過的Ruby書。本書從Ruby編程語言的基礎開始一直講到動態特性,其中包含大量的真實代碼示例并附有詳細的注解,對日常使用Ruby進行編程中會遇到的每個知識點都進行了清晰的講解。本書的內容由淺入深,主要包含Ruby編程語言的語法、面向對象的特性、默認對象self、控制流技術、常用的內置類、正則表達式、I/O操作,用大量的篇幅講述了Ruby中值得關注的動態特性。本書不僅適合Ruby編程語言的初學者,也適合有經驗的開發者以及那些想要真正提升Ruby編程技術的愛好者閱讀和學習,具有極高的參考價值。
導語_點評_推薦詞
David A. Black是國際知名的Ruby開發者、作家、培訓師、演講者、活動組織者、Ruby Central創辦人、Cyrus Innovation首席顧問。
目錄及時部分 Ruby語言基礎第1章 進入Ruby的世界 21.1 Ruby語言基礎知識 31.1.1 Ruby語法生存包 41.1.2 多種多樣的Ruby標識符 51.1.3 方法調用、消息和Ruby對象 71.1.4 編寫和保存一個簡單程序 81.1.5 給Ruby提供程序 91.1.6 鍵盤和文件I/O 111.2 剖析Ruby的安裝 131.2.1 Ruby標準庫子目錄(RbConfig::CONFIG[rubylibdir]) 141.2.2 C語言擴展目錄(RbConfig::CONFIG[archdir]) 141.2.3 site_ruby (RbConfig::CONFIG[sitedir])和vendor_ruby(RbConfig::CONFIG[vendordir])1.2.4 gems目錄 151.3 Ruby擴展和編程庫 151.3.1 加載外部文件和擴展 161.3.2 加載位于默認加載路徑中的文件 171.3.3 請求功能 181.3.4 require_relative指令 191.4 易用的Ruby工具和應用程序 191.4.1 解釋器的命令行開關 201.4.2 走近Ruby的交互式解釋器irb 231.4.3 ri和RDoc 251.4.4 任務管理實用工具:rake 261.4.5 使用gem命令安裝組件包 281.5 小結 29第2章 對象、方法和局部變量 302.1 與對象對話 302.1.1 Ruby和面向對象技術 312.1.2 創建通用對象 312.1.3 帶參數的方法 332.1.4 方法的返回值 342.2 制作一個對象:一個ticket對象的行為 352.2.1 ticket對象,行為優先 352.2.2 查詢ticket對象 362.2.3 通過字符串插值縮短ticket代碼 372.2.4 入場券有效性:用方法表達布爾狀態 372.3 對象的原生行為 392.3.1 使用object_id方法標識對象 402.3.2 使用respond_to?方法查詢對象的能力 412.3.3 使用send方法發送信息給對象 412.4 走近方法參數 432.4.1 必選參數和可選參數 432.4.2 參數的默認值 442.4.3 形參和實參的順序 452.4.4 實際參數列表的錯誤使用方式 472.5 局部變量和變量賦值 482.5.1 變量、對象和引用 492.5.2 變量賦值和重新賦值中的引用 512.5.3 引用和方法參數 522.5.4 局部變量及類似的事物 532.6 小結 54第3章 使用類組織對象 553.1 類和繼承 563.1.1 實例方法 563.1.2 覆蓋方法 573.1.3 重開類 573.2 實例變量和對象狀態 593.3 setter方法 623.3.1 方法命名中的等號 623.3.2 用于賦值風格方法的語法糖 633.3.3 充分使用setter方法 643.4 屬性和attr_方法體系 663.4.1 自動創建屬性 663.4.2 總結attr_方法 683.5 繼承和Ruby類層級結構 693.5.1 單繼承:繼承一個customer 703.5.2 對象祖先和永不缺失的聯系:Object類 703.5.3 El Viejo的長兄:BasicObject 713.6 類作為對象和消息接收者 723.6.1 創建類對象 723.6.2 類對象如何調用方法 733.6.3 單例方法的另一種使用方式 743.6.4 編寫一個類方法的時機和原因 753.6.5 類方法與實例方法 763.7 走近常量 773.7.1 常量的基礎應用 773.7.2 重賦值與修改常量 783.8 Ruby對象的"先天與后天" 793.9 小結 81第4章 模塊和程序組織 824.1 模塊創建和基礎應用 824.1.1 使用模塊封裝"棧特性" 834.1.2 將模塊混合到類中 854.1.3 進一步使用模塊 874.2 模塊、類和方法查找 894.2.1 方法查找的基本原理 894.2.2 同名方法的多次定義 924.2.3 prepend的工作原理 944.2.4 總結方法查找的規則 954.2.5 使用super向上追溯方法路徑 964.3 method_missing方法 984.4 類和模塊的設計與命名 1024.4.1 混合和繼承 1034.4.2 內嵌模塊和類 1044.5 小結 105第5章 默認對象(self)、作用域和可見性 1075.1 理解self、當前對象或默認對象 1085.1.1 轉變為self的對象和上下文 1085.1.2 頂層的self對象 1095.1.3 類、模塊和方法定義中的self 1105.1.4 self作為消息的默認接收者 1125.1.5 通過self解析實例變量 1155.2 判定作用域 1165.2.1 全局作用域和全局變量 1165.2.2 局部作用域 1185.2.3 局部作用域和self的相互作用 1215.2.4 作用域和常量的解析 1225.2.5 類變量語法、作用域和可見性 1245.3 部署方法訪問規則 1305.3.1 私有方法 1305.3.2 受保護的方法 1335.4 編寫和使用頂層方法 1345.4.1 定義一個頂層方法 1345.4.2 預定義的(內置的)頂層方法 1355.5 小結 136第6章 控制流技術 1376.1 條件代碼執行 1376.1.1 if和它的朋友們 1386.1.2 在條件語句主體和測試中的賦值語法 1426.1.3 case語句 1446.2 使用循環重復執行 1486.2.1 在loop方法中無條件地循環 1486.2.2 使用while和until關鍵字進行條件循環 1496.2.3 基于值列表循環 1516.3 迭代器和代碼塊 1526.3.1 迭代的細節 1526.3.2 迭代:"家常菜" 1526.3.3 解析方法調用 1536.3.4 代碼塊語法:花括號與do/end 1546.3.5 實現times方法 1556.3.6 each方法的重要性 1566.3.7 從each到map 1586.3.8 代碼塊參數和變量作用域 1596.4 錯誤處理和異常 1626.4.1 引發和捕獲異常 1626.4.2 使用rescue關鍵字挽救程序 1636.4.3 顯式地引發異常 1656.4.4 在rescue子句中捕獲異常 1656.4.5 ensure子句 1676.4.6 創建自己的異常類 1686.5 小結 169第二部分 內置類和模塊第7章 內置要點 1737.1 Ruby的字面構造器 1747.2 常用的語法糖 1757.2.1 通過定義方法定義運算符 1757.2.2 自定義一元運算符 1777.3 bang(!)方法和"危險" 1787.3.1 破壞性(接收者改變)影響的危險 1787.3.2 破壞能力和"危險"相對獨立的不同點 1797.4 內置和自定義to_(轉換)方法 1807.4.1 字符串轉換:to_s 1817.4.2 使用to_a和運算符進行數組轉換 1837.4.3 使用to_i和to_f進行數字轉換 1847.4.4 角色扮演to_方法 1857.5 布爾狀態、布爾對象和nil 1877.5.1 true和false作為狀態使用 1877.5.2 true和false作為對象 1897.5.3 特殊的對象nil 1907.6 對象比較 1917.6.1 相等性測試 1917.6.2 比較和Comparable模塊 1927.7 審查對象的能力 1947.7.1 列出對象的方法 1947.7.2 查詢類和模塊對象 1967.7.3 過濾和選擇性的方法列表 1967.8 小結 197第8章 字符串、符號和其他標 量對象 1988.1 字符串的使用 1988.1.1 字符串表示法 1998.1.2 基礎的字符串操作 2028.1.3 查詢字符串 2068.1.4 字符串比較和排序 2088.1.5 字符串轉換 2098.1.6 字符串轉型 2128.1.7 字符串編碼的簡介 2138.2 符號及其使用 2148.2.1 符號的主要特點 2158.2.2 符號和標識符 2168.2.3 實踐中的符號 2178.2.4 比較字符串和符號 2198.3 數值對象 2208.3.1 數值類 2218.3.2 執行算術運算 2218.4 時間和日期 2228.4.1 實例化日期和時間對象 2238.4.2 日期對象查詢的方法 2258.4.3 日期時間格式化的方法 2268.4.4 日期/時間對象的轉換方法 2278.5 小結 228第9章 集合和容器對象 2309.1 數組和散列的比較 2319.2 使用數組處理集合 2329.2.1 創建新數組 2329.2.2 插入、取回和移除數組的元素 2369.2.3 數組的合并 2389.2.4 數組轉換 2409.2.5 數組查詢 2419.3 散列 2419.3.1 創建新的散列 2429.3.2 插入、取回和移除散列鍵值對 2439.3.3 指定默認的散列值和行為 2459.3.4 與其他散列合并 2469.3.5 散列轉換 2479.3.6 散列查詢 2489.3.7 散列用于方法的最終參數 2499.3.8 回到參數的語法:具名(關鍵字)參數 2509.4 范圍 2519.4.1 創建范圍 2529.4.2 范圍的包含邏輯 2539.5 集合 2559.5.1 集合的創建 2559.5.2 操作集合的元素 2569.5.3 子集和超集 2589.6 小結 259第10章 集合類型核心:Enumerable和Enumerator 26010.1 運用each獲得枚舉能力 26110.2 Enumerable的布爾值查詢 26310.3 可枚舉對象的搜索和選擇 26510.3.1 通過find方法進行及時次 匹配 26510.3.2 使用find_all(又名select)和reject獲取 所有的匹配元素 26610.3.3 使用基于三等號匹配的grep來選擇元素 26710.3.4 使用group_by和partition組織選擇的結果 26810.4 可枚舉對象的元素級操作 26910.4.1 first方法 27010.4.2 take方法和drop方法 27110.4.3 min方法和max方法 27210.5 與each相關的方法 27310.5.1 reverse_each方法 27310.5.2 each_with_index方法(和each.with_index) 27310.5.3 each_slice方法和each_cons方法 27510.5.4 cycle方法 27510.5.5 使用inject減少可枚舉集合類型對象的數量 27610.6 map方法 27710.6.1 map的返回值 27810.6.2 使用map!原位映射 27810.7 將字符串作為準可枚舉對象 27910.8 可枚舉對象的排序 28110.8.1 在可枚舉對象排序中使用(或不使用)Comparable 模塊 28210.8.2 使用代碼塊定義排序 邏輯 28210.8.3 使用sort_by快捷排序 28310.9 枚舉器和可枚舉性的下一個維度 28310.9.1 使用代碼塊創建枚舉器 28410.9.2 附加枚舉器到其他對象 28610.9.3 無代碼塊迭代器隱式創建 枚舉器 28710.10 枚舉器的語義和使用 28810.10.1 枚舉器each方法的運用 28810.10.2 使用枚舉器保護對象 29010.10.3 使用枚舉器的細粒度迭代 29110.10.4 使用枚舉器添加可枚舉性 29210.11 枚舉器的方法鏈 29310.11.1 節約使用中間對象 29310.11.2 使用with_index檢索可枚舉對象 29510.11.3 使用枚舉器在字符串上執行異或操作 29510.12 延遲枚舉器 29710.13 小結 299第11章 正則表達式和基于正則表達式的字符串操作 30011.1 什么是正則表達式 30011.2 編寫正則表達式 30111.2.1 理解模式 30111.2.2 使用正則表達式的字面構造器執行簡單匹配 30211.3 構建正則表達式的模式 30311.3.1 模式中的文字字符 30311.3.2 點通配符(.) 30311.3.3 字符類 30411.4 匹配、子串截取和MatchData 30511.4.1 分組捕獲 30511.4.2 匹配成功和失敗 30711.4.3 獲取捕獲結果的兩種方式 30811.4.4 其他MatchData的信息 30911.5 使用量詞、錨點和修飾符微調正則表達式 31011.5.1 使用量詞約束匹配 31011.5.2 貪婪的(和非貪婪的)量詞 31211.5.3 正則表達式的錨點和斷言 31411.5.4 修飾符 31711.6 字符串和正則表達式的相互轉換 31811.6.1 字符串轉換為正則表達式的習語 31811.6.2 轉換正則表達式為字符串 32011.7 正則表達式的常用方法 32011.7.1 String#scan 32111.7.2 String#split 32211.7.3 sub/sub!和gsub/gsub! 32311.7.4 case相等性和grep方法 32411.8 小結 326第12章 文件和I/O操作 32712.1 Ruby中I/O系統的組成 32712.1.1 IO類 32812.1.2 將IO對象用作可枚舉對象 32812.1.3 STDIN、STDOUT、STDERR 32912.1.4 關于鍵盤輸入的更多內容 33012.2 基本文件操作 33112.2.1 文件讀取基礎 33112.2.2 基于行的文件讀取 33212.2.3 基于字節和字符的文件讀取 33312.2.4 搜索和查詢文件位置 33312.2.5 使用File的類方法讀取文件 33412.2.6 寫入文件 33512.2.7 使用代碼塊限定文件操作的作用域 33612.2.8 File對象的可枚舉性 33712.2.9 文件I/O異常和錯誤 33812.3 查詢IO和File對象 33912.3.1 從File類和FileTest模塊中獲得信息 33912.3.2 使File::Stat獲取文件信息 34012.4 使用Dir類進行目錄操作 34112.4.1 讀取目錄下的條目 34112.4.2 目錄操作和查詢 34312.5 標準庫中的文件處理工具 34412.5.1 FileUtils模塊 34512.5.2 Pathname類 34612.5.3 StringIO類 34812.5.4 open-uri庫 34912.6 小結 349第三部分 Ruby動態編程第13章 對象的個性化 35313.1 單例對象存在的位置:單例類 35413.1.1 通過單例類雙重決定 35513.1.2 直接檢查和修改單例類 35513.1.3 查找路徑中的單例類 35713.1.4 singleton_class方法 36113.1.5 深入類方法 36113.2 修改Ruby核心類和模塊 36313.2.1 改變核心功能的風險 36313.2.2 附加修改 36813.2.3 穿透覆蓋 36813.2.4 通過extend修改獨立對象 37013.2.5 使用精化修改核心行為 37313.3 BasicObject作為祖先類和類 37413.3.1 使用BasicObject 37413.3.2 實現BasicObject的子類 37613.4 小結 378第14章 可調用和可運行對象 37914.1 基礎的匿名函數:Proc類 38014.1.1 Proc對象 38014.1.2 proc和代碼塊以及區別 38114.1.3 代碼塊與proc相互轉換 38214.1.4 簡潔的Symbol#to_proc 38514.1.5 proc作為閉包使用 38614.1.6 Proc的形式參數和實際參數 38814.2 使用lambda和->創建函數 38914.3 將方法作為對象使用 39014.3.1 捕獲方法對象 39114.3.2 方法對象的基本原理 39114.4 eval方法體系 39314.4.1 使用eval執行任意的字符串 39314.4.2 eval的危險 39414.4.3 instance_eval方法 39514.4.4 使用class_eval(又名module_eval) 39714.5 使用線程并行執行 39814.5.1 終止、停止和開啟線程 39914.5.2 基于線程實現的日期服務器 40114.5.3 使用套接字和線程編寫聊天服務器 40214.5.4 線程與變量 40414.5.5 操作線程鍵 40514.6 從Ruby內部程序中發出系統命令 40814.6.1 system方法和反引號 40814.6.2 通過open和popen3與程序通信 41014.7 小結 412第15章 回調、鉤子和運行時自省 41415.1 回調和鉤子 41415.1.1 使用method_missing攔截不可識別的消息 41515.1.2 捕獲include和prepend操作 41815.1.3 攔截extend 41915.1.4 使用Class#inherited攔截繼承事件 42115.1.5 Module#const_missing方法 42215.1.6 method_added方法和singleton_method_added方法 42215.2 攔截針對對象能力的查詢 42415.2.1 列出對象的非私有方法 42415.2.2 列出私有和受保護方法 42615.2.3 獲得類和模塊的實例方法 42715.2.4 列出對象的單例方法 42915.3 變量和常量的自省機制 43115.3.1 列出局部和全局變量 43115.3.2 列出實例變量 43115.4 執行追蹤 43215.4.1 使用caller檢查棧追蹤 43215.4.2 編寫工具以解析棧追蹤 43315.5 回調和方法審查的實踐 43615.5.1 MicroTest的背景: MiniTest 43615.5.2 說明和實現 MicroTest 43915.6 小結 441