Scala的集合库包含转发器
IterableForwarder
,TraversableForwarder
,SeqForwarder
以及代理,如
IterableProxy
,MapProxy
,SeqProxy
,SetProxy
,TraversableProxy
等.转发器和代理都将集合方法委托给底层集合对象.这两者之间的主要区别在于转发器不会转发会创建相同类型的新集合对象的调用.
在哪种情况下,我更喜欢这些类型中的一种?货运代理为何以及何时有用?如果它们有用,为什么没有MapForwarder和SetForwarder?
我假设如果想要使用其他方法为集合构建包装器或者对标准集合进行操作,则最常使用代理.
解决方法
我认为
this answer提供了一般关于代理的一些上下文(你对包装和拉皮条的假设是正确的).
据我所知,Proxy的子类型更适合最终用户.使用Proxy时,代理对象和self对象在所有意图和目的上都是相同的.我认为这实际上是主要的区别.如果该假设不成立,请不要使用代理.
Forwarder特征似乎只用于支持ListBuffer,如果需要在CanBuildFrom基础结构之上构建自己的集合类,可能更合适.所以我想说它更适合图书馆作家,其中图书馆基于2.8集合设计.