弦而時習之

你大概沒機會遇到的 Bug - 跟 Ruby Committer 聊 Enumerator 跟 Fiber

今年 RubyConf Taiwan 嘗試辦了 After Hack 這個活動,也因此有機會可以跟 Ruby 語言的 Commiter 聊一些有趣的問題。

當天我的預定是把活動這幾天寫的 Gem 認真的補完測試,不過沒想到還剩下一個多小時就做完了,那就順便來思考一下 Tamashii 專案能怎樣去改進,在今年的演講中大家應該都對 Fiber 有一個認識,而這個也許是一個不錯的選項。

所以就馬上去看了一下講者(Samuel)的 Async 這個 Gem 做了些什麼事情,因為剛講完關於 Enumerator 的演講,所以自然地看到了一段引起我興趣的說明。

Due to limitations within Ruby and the nature of this library, it is not possible to use to_enum on methods which invoke asynchronous behavior. We hope to fix this issue in the future.

既然作者本人就在現場,而且 Issue 的內容也看不太出來發生什麼問題,那麼就直接問吧!

探索 Ruby 的 each 方法(一)

原本是想討論 Enumerable 這個 Module 的機制跟運作原理,不過越寫越發現光是一篇文章很難講明白。

所以就一邊查資料跟 Ruby 原始碼,慢慢的把 Enumerable / Enumerator 這兩個讓 #each 運作起來的機制討論清楚。

在 Ruby 裡面我們已經很熟悉使用 #each 來對陣列相關的物件進行操作,不過在大部分的語言我們都需要透過迴圈的方式來取出陣列的元素,那麼 #each 這個方法到底是怎麼讓我們用這麼方便的機制來操作陣列的呢?