2011-04-20 45 views
6

Scala的集合库包含了代理IterableForwarderTraversableForwarderSeqForwarder和代理像IterableProxyMapProxySeqProxySetProxyTraversableProxy等代理和代理两种委托收集方法到底层集合对象。这两者之间的主要区别是,转发器不会转发会创建相同类型的新收集对象的调用。斯卡拉收集代理的使用情况和代理

在哪种情况下,我更喜欢这些类型之一?为什么和什么时候转发者有用?如果他们有用,为什么没有MapForwarderSetForwarder

我认为代理是最经常使用的,如果你想用其他方法为一个集合构建一个包装器或者为标准集合构建一个包装器。

回答

4

我认为this answer一般提供了一些关于Proxy的背景(并且你对包装和皮条的假设是正确的)。

据我所知,Proxy的亚型更针对最终用户。当使用Proxy代理对象和self对象将为等于出于所有意图和目的。我认为这实际上是主要区别。如果该假设不成立,则不要使用Proxy

转发特性似乎只用于支持ListBuffer,如果一个需要推出建立在CanBuildFrom基础设施上自己的集合类可能更合适。所以我会说它更加针对图书馆基于2.8集合设计的图书馆作者。

+0

感谢您的回答! _Forwarder_特征仅用于'ListBuffer'可以回答为什么没有'MapForwarder'和'SetForwarder'的问题:因为它们不需要实现'ListBuffer'。 – 2011-04-21 09:33:17