Варианты использования форвардеров и прокси-серверов Scala

Библиотека коллекций Scala содержит серверы пересылки IterableForwarder, < a href="http://www.scala-lang.org/api/current/scala/collection/generic/TraversableForwarder.html" rel="nofollow">TraversableForwarder, SeqForwarder и прокси, такие как IterableProxy, MapProxy, SeqProxy, SetProxy , TraversableProxy и т. д. методы действия для базового объекта коллекции. Основное различие между ними заключается в том, что серверы пересылки не пересылают вызовы, которые могли бы создать новые объекты коллекции того же типа.

В каких случаях я бы предпочел один из этих типов другому? Почему и когда форвардеры полезны? И если они полезны, почему нет MapForwarder и SetForwarder?

Я предполагаю, что прокси чаще всего используются, если кто-то хочет создать оболочку для коллекции с дополнительными методами или прокачать стандартные коллекции.


person Frank S. Thomas    schedule 20.04.2011    source источник


Ответы (1)


Я думаю, что этот ответ дает некоторый контекст о Proxy в целом (и ваше предположение о враппере и сутенерстве было бы правильным).

Насколько я могу судить, подтипы Proxy больше ориентированы на конечных пользователей. При использовании Proxy прокси-объект и объект self будут равны во всех смыслах и целях. Я думаю, что это на самом деле основное отличие. Не используйте Proxy, если это предположение не выполняется.

Черты Forwarder, по-видимому, используются только для поддержки ListBuffer и могут быть более подходящими, если нужно развернуть собственный класс коллекции, построенный поверх инфраструктуры CanBuildFrom. Поэтому я бы сказал, что он больше ориентирован на авторов библиотек, где библиотека основана на дизайне коллекции 2.8.

person huynhjl    schedule 21.04.2011
comment
Спасибо за Ваш ответ! То, что трейты Forwarder используются только для ListBuffer, может ответить на вопрос, почему нет MapForwarder и SetForwarder: потому что они не требуются для реализации ListBuffer. - person Frank S. Thomas; 21.04.2011