在Ruby中對塊進行迭代非常簡單 - 它乾淨地完成並繼續執行其餘的代碼。Ruby Enumerator - 爲什麼以異常結束?
另一方面,使用枚舉器進行迭代更容易混淆。如果你調用:每一個都沒有塊,則返回一個枚舉器。 :接下來可以在枚舉器上調用以獲取每個下一個迭代值。
然後當迭代完成,而不是枚舉返回無奇兼職,它拋出一個異常:「在迭代結束時達到」。結果是它甚至不返回一個值。
例如:
test = [ 'test_value' ]
enumerator = test.each
enumerator.next
>> "test_value"
enumerator.next
>> StopIteration: iteration reached at end
簡直讓零值可以通過枚舉器返回的原因呢?答案只發生在我發佈這個(所以我會發布它仍然),但似乎一定是這種情況。
如果是這樣,這是處理這些問題的典型方法嗎?使用異常來處理基本上按預期執行的代碼似乎很奇怪。
OCaml的走得更遠 - 紅寶石的'散列的更多或更少的當量[鍵]'('List.assoc鍵hash')引發一個例外('Not_found')如果密鑰不表示。這實際上是非常合乎邏輯的 - 當你調用':next'時,你期望的「正常」是獲得下一個值。 *不*獲得下一個值顯然是一種特殊情況。 – Amadan 2010-07-09 15:47:20
@Amadan:如果找不到密鑰,'hash.fetch(key)'會引發一個'KeyError'。 – 2010-07-09 17:17:02
有趣的說法阿馬丹 - 我買了它。 – Asher 2010-07-10 02:41:47