preloader
學習

Ruby 1.9.3 String class串接太多method的bug

Ruby 1.9.3 String class串接太多method的bug

2013/10/27新增:經WanCW回應提醒,我發現是自己誤解gsub()和gsub!()運作的方式,gsub()不論有否取代內容,都會回傳一個字串,gsub!()則是當有取代內容才會回傳一個字串,否則會回傳nil──因此這是我的疏忽,Ruby 1.9.3這部份是沒有bug的。

 

自己寫小程式抓資料時,發現Ruby 1.9.3有bug:String variable 一行程式碼內串太多gsub!(),執行時這個變數會變成nil:NilClass

我使用的版本是 ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.0]

 

Ruby String class的gsub!(pattern, substitutionString)的功用是以substitutionString取代string variable內有出現pattern的地方。我寫小程式過濾網頁資料時,一行程式碼串了4次gsub!(),Ruby interpreter有時會顯示這個string variable是nil:NilClass,過程請看以下圖片:

圖一、一行(第101行)程式碼串接四次gsub!()

 

圖二、一行程式碼內串接4個gsub!()的執行結果–Failure

 

圖三是將原先一行程式碼拆成同義的兩行程式碼去執行,原先第三個gsub!()改成gsub(),並回傳給等號左邊的變數:table;執行結果如圖四所示。

 

圖三、一行程式碼內容拆成兩行(第102、103行)執行

   

圖四、分兩行程式碼串接4個gsub!()的執行結果– Success