Scala 的集合库包含转发器IterableForwarder http://www.scala-lang.org/api/current/scala/collection/generic/IterableForwarder.html, TraversableForwarder http://www.scala-lang.org/api/current/scala/collection/generic/TraversableForwarder.html, SeqForwarder http://www.scala-lang.org/api/current/scala/collection/generic/SeqForwarder.html和代理喜欢IterableProxy http://www.scala-lang.org/api/current/scala/collection/IterableProxy.html, MapProxy http://www.scala-lang.org/api/current/scala/collection/MapProxy.html, SeqProxy http://www.scala-lang.org/api/current/scala/collection/SeqProxy.html, SetProxy http://www.scala-lang.org/api/current/scala/collection/SetProxy.html, TraversableProxy http://www.scala-lang.org/api/current/scala/collection/TraversableProxy.html等等。转发器和代理都将集合方法委托给底层集合对象。这两者之间的主要区别在于转发器不会转发会创建同类新集合对象的调用。
在什么情况下我会更喜欢其中一种类型而不是另一种?转发器为何以及何时有用?如果它们有用为什么没有MapForwarder
and SetForwarder
?
我认为如果想要使用附加方法为集合构建包装器或为标准集合提供便利,最常使用代理。
I think 这个答案 https://stackoverflow.com/questions/3900827/how-do-i-use-the-trait-scala-proxy/3901166#3901166提供了一些关于Proxy
一般来说(你对包装和拉皮条的假设是正确的)。
据我所知,Proxy
更针对最终用户。使用时Proxy
代理对象和self
对象将是equal出于所有意图和目的。我认为这实际上是主要的区别。不要使用Proxy
如果这个假设不成立。
The 货代特质似乎只是用来支持ListBuffer
如果需要推出自己的基于集合类的集合类,则可能更合适CanBuildFrom
基础设施。所以我想说它更适合图书馆编写者,该图书馆基于 2.8 集合设计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)