2012-06-13 3 views
12

プロキシと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、何が良いですか?

更新:

  • 代理必要はありません、最初のパラメータとしてthis:私は何かを見つけ

  • プロキシサポートスーパークラス。
  • プロキシサポートの引数。 Clojure.org's overview of data typesから

答えて

17

reifyのメソッド本体は、字句クロージャであり、周辺地域の範囲を参照することができます。その中proxyからreify異なる:

  • のみプロトコルまたはインターフェースがサポートされ、具体的なスーパー。
  • メソッド本体は、結果のクラスの真のメソッドであり、外部のfnではありません。
  • インスタンスに対するメソッドの呼び出しは、直接マップのルックアップを使用しないで行います。
  • メソッドマップ内のメソッドの動的スワップをサポートしていません。

結果は、構成と呼び出しの両方で、proxyよりも優れたパフォーマンスです。 reifyは、その制約が厳しくないすべての場合において、proxyよりも好ましい。

出典:http://clojure.org/datatypes

+0

おかげで、私はより正確にClojureのドキュメントを読んでいる必要があります –

関連する問題