当我跟scala一起时,我偶然发现了一个我完全不理解其内部的代码。如果一些经验丰富的开发人员对此有所了解,那就太棒了。
代码段看起来很简单:
var cache = Set.empty[String]
...
if (!cache(url) && depth > 0)
...
cache += url
这里的问题是缓存(url),它从上下文中计算为s:Boolean = true我明白它的工作方式就像包含但我可能会弄错。更多我感兴趣它是如何在内部工作的,例如我知道您可以使用与此处提到的代码相同的方式访问数组元素。 Set(1,2)通过伴侣对象转换为Set.apply(1,2)。但在这里,我有点迷失,因此很难在文档中找到答案。
感谢您帮助我
答案 0 :(得分:4)
它没有通过伴侣对象翻译,而是翻译为cache.apply(url)
(就像Set(1)
翻译为Set.apply(1)
- 没有任何魔法关于Set
碰巧是伴随对象的事实,任何值都是相同的。您可以在the scaladoc上看到apply
上Set
的内容{/ 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