2

Clojureを使用すると、次deftypeのようなインターフェイスを不完全に実装できます。

(deftype Foo [x] clojure.lang.ISeq (next [this] x))

Fooは実装していませんseq)。ダックタイピングのPythonの土地、またはせいぜい(または、POVによっては最悪の場合)ABCから来ているので、インターフェイスのポイントはメソッドのセット(現在のように、他の人のdeftypeを安全に使用するには、各「メソッド」呼び出しをでラップする必要があるようtry...catchです)。

4

2 に答える 2

1

これは、動的言語哲学である Clojure と静的言語哲学である Java の交差点の 1 つです。そして、それは2つの間の混乱のポイントを示しています、私は同意します. 理論的根拠は、clojure プログラムが過度の苦痛なしに Java ライブラリーを使用できるようにすることであり、多くのライブラリーでは、Java のファースト・クラス関数の欠如を回避するために、メソッドを実装する何らかのクラスのインスタンスを渡す必要があります。その観点からは、トレードオフは理にかなっていますが、他の観点からは Java 哲学に完全には適合しません。

于 2012-05-22T18:21:44.593 に答える
1

完全な実装を要求すると、対話型プログラミングが無効になります。誰かが ISeq を完全に実装していない型を提供した場合、彼らはあなたに壊れた型を与えています。そうは言っても、実装の見落としがないかソースをチェックするClojureリンター/アナライザーは非常に便利に思えます。

于 2012-05-22T21:34:02.187 に答える