访问scala不可变Set

时间:2015-01-07 15:23:14

标签: scala collections

当我跟scala一起时,我偶然发现了一个我完全不理解其内部的代码。如果一些经验丰富的开发人员对此有所了解,那就太棒了。

代码段看起来很简单:

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

这里的问题是缓存(url),它从上下文中计算为s:Boolean = true我明白它的工作方式就像包含但我可能会弄错。更多我感兴趣它是如何在内部工作的,例如我知道您可以使用与此处提到的代码相同的方式访问数组元素。 Set(1,2)通过伴侣对象转换为Set.apply(1,2)。但在这里,我有点迷失,因此很难在文档中找到答案。

感谢您帮助我

2 个答案:

答案 0 :(得分:4)

它没有通过伴侣对象翻译,而是翻译为cache.apply(url)(就像Set(1)翻译为Set.apply(1) - 没有任何魔法关于Set碰巧是伴随对象的事实,任何值都是相同的。您可以在the scaladoc上看到applySet的内容{/ 1}}。

答案 1 :(得分:0)

scala doc中找到了一条说明如下:

集合是不包含重复元素的Iterables。集合上的操作总结在下表中,用于一般集合,在表格中对可变集合进行了总结。它们分为以下几类:

测试包含,apply,subsetOf。 contains方法询问集合是否包含给定元素。 set的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