Подтвердить что ты не робот

В чем разница между прокси-сервером и reify?

В чем разница между прокси и reify? У меня есть пример кода:

(.listFiles (java.io.File. ".")
  (proxy
    [java.io.FileFilter] []
    (accept [f]
      (.isDirectory f))))

(.listFiles (java.io.File. ".")
  (reify
    java.io.FileFilter
    (accept [this f]
      (.isDirectory f))))

результат тот же, когда используется прокси или reify, что лучше?

Update:

Я нашел что-то:

  • прокси не нужен this как первый параметр.
  • поддержка суперкласса прокси.
  • аргументы поддержки прокси.
4b9b3361

Ответ 1

Из Clojure.org обзор типов данных:

Телами метода reify являются лексические замыкания и могут ссылаться на окружающую локальную область. reify отличается от proxy тем, что:

  • Поддерживаются только протоколы или интерфейсы, нет конкретного суперкласса.
  • Телами метода являются истинные методы результирующего класса, а не внешние fns.
  • Вызов методов в экземпляре напрямую, не используя поиск по карте.
  • Нет поддержки динамической замены методов на карте методов.

Результат - лучшая производительность, чем proxy, как при построении, так и при вызове. reify предпочтительнее proxy во всех случаях, когда его ограничения не являются запретительными.

Источник: http://clojure.org/datatypes