私のソフトウェアの特定の部分をどのようにアーキテクチャするかという問題に直面しています。 私は、現在のOSによっては ダークマジックを行うmake-temp-dir
(と多くの他のもの)という関数があります。私は別々の名前空間に各OSのためのこれらのメソッドの の実装を置くことができるようにしたいです。環境に依存するプロトコル/マルチメソッドのクローズアップ
まず、プロトコル(可能な場合)またはマルチメソッドが の解決策であると私は信じています。しかし、複数の名前空間にまたがって実装する でこれらを使用する例は見たことがありません。そして、私はこれがどのように動作するのか理解できません 。私はこのためのプロトコルを使用する場合
第二には、私はすべての時間があまりにも良い を見ていない最初の引数としてのOSを渡し、どういうわけか
(make-temp-dir current-os arg-1 arg-2)
のようなもの メソッドを呼び出す必要があります私に。意味のために、make-temp-dir
は、OSに応じてインテリジェントな の決定を取ることをお勧めします。確かに私はいくつかのマクロを使用して何かをすることができます
(doto current-os
(make-temp-dir arg-1 arg2))
しかし、それは間違って感じる。
これはどのように行う必要がありますか?または私は間違った方法を行っていますか?どんな助けもありがたい。
を編集してください。ありがとうございます。@kotarakに感謝して、私は何か作業をすることができました。これにつまずいた人のために、https://gist.github.com/2477120。そのうまく動作して、私はそれと一緒に行くだろうと思う。みんな、ありがとう。あなたはユーティリティ機能のいずれかを使用する前に、alter-var-root
でcurrent-os
を初期化する必要があり、あなたの起動コードで
したがって、2番目のコードは 'your.utils'名前空間の下に置く必要がありますか?また、 '# ''読者マクロは何ですか?申し訳ありませんが、どちらにするかはわかりません;) –
'#''は* var quote *と呼ばれます。 var quotesの説明は、https://groups.google.com/forum/?fromgroups#!topic/clojure/jDBAJD4nWqsでご覧いただけます。 – user100464
@kotarak、大丈夫、素晴らしい解決策。それを消化するのに私にこれほど長い時間がかかりましたが、何が起こっているのか理解していると思います。私はまだ最初のコメントにいくつかの入力が欲しいと思います。 –