私はサードパーティのライブラリ(clj-msgpack)を使用しており、ライブラリがハンドラを提供するタイプのプロトコルを拡張したいと考えています。他のユーザーに影響を与えずにライブラリ提供プロトコルを拡張する
それだけで十分ですが、これを行う方法はありますが、同じJVM内で実行されているこのライブラリの他のユーザーには影響しません。動的なvarバインディング(スタック上の特定のポイントの下でのみ有効)と同様のものが理想的です。
現在のところ、私は無条件オーバーライドを行っていますが、動的なvarを使用して変更された動作を有効にしています。しかし、これは私の快適さのために猿のパッチを当てるようにはるかに多く感じます。好奇心、(入院醜態)については
Iが所定の位置に入れているが、以下:
:
(in-ns 'clj-msgpack.core)
(def ^:dynamic *keywordize-strings*
"Assume that any string starting with a colon should be unpacked to a keyword"
false)
(extend-protocol Unwrapable
RawValue
(unwrap [o]
(let [v (.getString o)]
(if (and *keywordize-strings* (.startsWith v ":"))
(keyword (.substring v 1))
v))))
フォークは、あなたが必要とする機能を追加し、 ^) – noahlz
@noahz私はコード付きのチケットを提出しました。アップストリームがこの機能を_desirable_と考えるかどうかは非常に疑わしいことですが、私がそれを受け入れるかどうかはわかりません。 –
私はそのコメントを(あなたが言及した理由で)しましたが、一方で... APIは「拡張のために開かれ、修正のために閉じられる」必要があります。 – noahlz