簡體   English   中英

訪問scala不可變集

[英]Accessing scala immutable Set

在與scala一起使用時,我偶然發現了一個我完全不了解其內部結構的代碼。 如果一些經驗豐富的開發人員對此有所投入,那就太好了。

代碼段看起來非常簡單:

var cache = Set.empty[String]
...
 if (!cache(url) && depth > 0)
      ...  
      cache += url

這里的問題是cache(url)的結果為s:從上下文中可以看出Boolean = true我理解它的工作方式類似於contains,但我可能會誤解。 更多我感興趣的是它在內部如何工作,例如,我知道您可以按照此處提到的代碼相同的方式訪問array的元素。 Set(1,2)通過伴隨對象轉換為Set.apply(1,2)。 但是,我有點迷失了方向,因此很難在文檔中找到答案。

謝謝你的協助

它不是通過伴隨對象翻譯的,而是被翻譯為cache.apply(url) (就像Set(1)轉化為Set.apply(1)Set恰好是一個伴隨對象,任何值都沒有什么神奇之處Set.apply(1)工作原理相同)。 您可以看到的scaladoc什么apply做一個Set

scala doc中找到了一個解釋,其中指出:

集合是不包含重復元素的Iterable。 下表中概述了對集合的操作(對於常規集合),在其后的表格中總結了對可變集合的操作。 它們分為以下幾類:

測試包含,套用,subsetOf。 contains方法詢問集合是否包含給定元素。 集的apply方法與contains相同,因此set(elem)與set contains elem相同。 這意味着集合還可以用作測試函數,對於其中包含的元素返回true。 例如:

scala> val fruit = Set("apple", "orange", "peach", "banana")
fruit: scala.collection.immutable.Set[java.lang.String] = Set(apple, orange, peach, banana)
scala> fruit("peach")
res0: Boolean = true
scala> fruit("potato")
res1: Boolean = false

暫無
暫無

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

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