相关疑难解决方法(0)

Scala集合转发器和代理的使用案例

Scala的集合库包含了代理IterableForwarder,TraversableForwarder,SeqForwarder和代理一样IterableProxy,MapProxy,SeqProxy,SetProxy,TraversableProxy,等代理和代理两种委托收集方法到底层集合对象.这两者之间的主要区别在于转发器不会转发会创建相同类型的新集合对象的调用.

在哪种情况下,我更喜欢这些类型中的一种?货运代理为何以及何时有用?如果他们是有用的,为什么会有不MapForwarderSetForwarder

我假设如果想要使用其他方法为集合构建包装器或者对标准集合进行操作,则最常使用代理.

scala scala-2.8 scala-collections

6
推荐指数
1
解决办法
564
查看次数

实现一个scala集合,以便map,filter等生成正确的类型

我正在尝试实现默认值映射,并且我希望过滤器,映射等等,DefaultingMap以便DefaultingMap尽可能地生成.这是我最初的实现:

class DefaultingMap[K, V](defaultValue: => V)
extends mutable.HashMap[K, V]
with mutable.MapLike[K, V, DefaultingMap[K, V]] {

  override def empty = new DefaultingMap[K, V](defaultValue)

  override def default(key: K): V = {                 
    val result = this.defaultValue
    this(key) = result
    result                                            
  }
}
Run Code Online (Sandbox Code Playgroud)

DefaultingMap使用时会得到类型的对象filter,但是当我使用时却没有map:

scala> val counter = new DefaultingMap[Char, Int](0)
counter: DefaultingMap[Char,Int] = Map()

scala> for (c <- "ababcbbb") counter(c) += 1

scala> counter.filter{case (k, v) => v > 1}
res1: …
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

5
推荐指数
1
解决办法
1708
查看次数

标签 统计

scala ×2

scala-collections ×2

scala-2.8 ×1