簡體   English   中英

當foreach添加元素時,scala MutableList為什么不拋出異常

[英]scala MutableList when foreach add element why not throw Exception

當我嘗試scala列表時,我發現了一個問題。 當我使用MutableList時,只想嘗試在foreach中附加一個元素(我知道這是一個錯誤的操作):

import scala.collection.mutable.MutableList
val tts = MutableList("Hello World~")
tts.foreach { t => 
  tts += "Hello World~"
  println(t)
}

控制台輸出:

Hello World~
Hello World~

我的問題是,為什么上面的代碼不拋出ConcurrentModificationException或正常輸出?

在迭代期間將ConcurrentModificationException拋出修改時,通常稱為快速失敗語義。 Scala集合類通常不會拋出ConcurrentModificationException因為:

  • 快速失敗使迭代器的實現復雜化
  • 故障快速通常會減慢迭代器的實現
  • 在所有情況下都很難保證快速失敗(即使Java類也不保證並且會盡力而為
  • 在多線程代碼中更難確保快速故障轉移

由於這個原因,Scala僅記錄了不允許進行並發修改,而不是努力實現快速失敗並以泄漏抽象告終。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM