2012-06-13 70 views
12

Sự khác nhau giữa proxy và reify là gì? Tôi có một số mã ví dụ:Sự khác nhau giữa proxy và reify là gì?

(.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)))) 

kết quả là giống nhau, khi sử dụng proxy hoặc sửa lại, cái nào tốt hơn?

Cập nhật:

tôi tìm thấy một cái gì đó:

  • ủy quyền không có nhu cầu this như tham số đầu tiên.
  • siêu lớp hỗ trợ proxy.
  • đối số hỗ trợ proxy.

Trả lời

17

Từ Clojure.org's overview of data types:

Phương pháp này cơ quan của reify là đóng cửa từ vựng, và có thể tham khảo các phạm vi địa phương lân cận. reify khác với proxy ở chỗ:

  • Chỉ giao thức hoặc giao diện được hỗ trợ, không có lớp cha bê tông.
  • Các phương thức của phương thức là các phương thức thực sự của lớp kết quả, không phải các fns bên ngoài.
  • Gọi phương thức trên cá thể là trực tiếp, không sử dụng tra cứu bản đồ.
  • Không hỗ trợ cho việc hoán đổi động các phương thức trong bản đồ phương thức.

Kết quả là hiệu suất tốt hơn proxy, cả trong xây dựng và gọi. reify thích hợp hơn là proxy trong mọi trường hợp các ràng buộc của nó không bị cấm.

Nguồn: http://clojure.org/datatypes

+0

cảm ơn, tôi phải đọc các tài liệu clojure chính xác hơn –

Các vấn đề liên quan