2012-06-13 18 views
12

Jaka jest różnica między proxy a reify? Mam przykładowy kod:Jaka jest różnica między proxy a 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)))) 

wynik jest taki sam, kiedy używasz proxy lub reify, co jest lepsze?

Aktualizacja:

znalazłem coś:

  • proxy nie potrzebują this jako pierwszy parametr.
  • nadklasa supervisora.
  • argumenty wsparcia proxy.

Odpowiedz

17

Od Clojure.org's overview of data types:

Metoda Ciała reify są zamknięcia leksykalne i może odnosić się do otaczającego zasięgu lokalnym. reify różni się od proxy że:

  • jedynie protokoły lub interfejsy są obsługiwane, nie beton nadklasą.
  • Ciała metody są prawdziwymi metodami wynikowej klasy, a nie zewnętrzne fns.
  • Inwokacja metod na instancji jest bezpośrednia, bez korzystania z wyszukiwania mapy.
  • Brak obsługi dynamicznego zamiany metod w mapie metod.

Wynikiem jest lepsza wydajność niż proxy, zarówno w budownictwie, jak i przy wywoływaniu. reify jest lepszym rozwiązaniem niż proxy we wszystkich przypadkach, w których jego ograniczenia nie są wygórowane.

Źródło: http://clojure.org/datatypes

+0

dzięki, powinienem dokładniej przeczytać docs Clojure –

Powiązane problemy