访问 Scala 不可变集

Accessing scala immutable Set

当我使用 scala 时,我偶然发现了一个我完全不理解其内部结构的代码。如果一些更有经验的开发人员对此进行一些改进,那就太好了。

代码片段看起来很简单:

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

这里的问题是 cache(url) 从上下文计算结果为 s: Boolean = true 我理解它的工作方式类似于 contains 但我可能弄错了。更多我感兴趣的是它在内部是如何工作的,例如我知道您可以使用与此处提到的代码相同的方式访问数组元素。 Set(1,2) 通过伴随对象转换为 Set.apply(1,2)。但是在这里我有点迷路,因此很难在文档中找到答案。

谢谢你帮助我

它不是通过伴随对象转换的,它被转换为 cache.apply(url)(就像 Set(1) 转换为 Set.apply(1) - Set 发生这一事实并没有什么神奇之处要成为伴生对象,任何值都一样)。您可以从 the scaladoc 中看到 applySet 上做了什么。

scala doc 中找到了解释,其中说明如下:

集合是不包含重复元素的可迭代对象。对集合的操作总结在下面的 table 通用集合和之后的 table mutable 集合。它们分为以下几类:

测试包含、应用、subsetOf。 contains 方法询问一个集合是否包含给定的元素。 set 的 apply 方法与 contains 相同,因此 set(elem) 与 set contains elem 相同。这意味着集合也可以用作测试函数,它们包含的元素 return 为真。 例如:

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