Scala的集合库包含转发器IterableForwarder、TraversableForwarder、SeqForwarder和代理,如IterableProxy、MapProxy、SeqProxy、SetProxy、TraversableProxy等。转发器和代理都将集合方法委托给底层集合对象。这两者之间的主要区别在于,转发器不会转发会创建相同类型的新集合对象的调用。
在哪些情况下,我更喜欢这些类型中的一种?为什么转发器有用?什么时候转发器有用?如果它们是有用的,为什么没有MapForwarder和SetForwarder
我认为,如果想要为具有其他方法的集合构建包装器,或者想要给标准集合拉皮条,那么最常用的就是代理。
发布于 2011-04-21 15:09:58
我认为this answer总体上提供了一些关于Proxy的上下文(您关于包装器和拉皮条的假设是正确的)。
据我所知,Proxy的子类型更多地面向终端用户。在使用Proxy时,代理对象和self对象在所有目的和目的上都是相同的。我认为这实际上是主要的区别。如果该假设不成立,请不要使用Proxy。
转发器特性似乎只用于支持ListBuffer,如果需要推出构建在CanBuildFrom基础设施之上的自己的集合类,它可能更合适。所以我想说的是,它更多地针对的是库作者,因为库是基于2.8的集合设计的。
https://stackoverflow.com/questions/5737534
复制相似问题