我在如何架構我的軟件的特定部分時遇到問題。 可以說,我有一個叫做make-temp-dir
(和其他很多)的功能,它根據當前的操作系統做了一些暗黑魔法。我希望能夠將每個操作系統的這些方法的 實現放在單獨的命名空間中。clojure中的協議/多方法的環境相關調度
首先,我認爲協議(如果可能的話)或multimethods是解決方案 這。不過,我從來沒有見過一個跨越多個命名空間的實現 的例子。而且我無法弄清楚這是怎麼工作的 。
其次,如果我使用的協議對於這一點,我會以某種方式調用的方法的東西 像
(make-temp-dir current-os arg-1 arg-2)
,通過操作系統,因爲所有的時間看起來並不太好 的第一個參數對我來說。出於語義的原因,我希望make-temp-dir
根據操作系統採取智能的 決定。當然,我可以使用一些宏和做類似
(doto current-os
(make-temp-dir arg-1 arg2))
但覺得不妥。
應該怎麼做?或者我走錯了路?任何幫助讚賞。
編輯:好的,感謝噸@kotarak,我設法讓一些工作。對於任何絆倒在此的人,https://gist.github.com/2477120。它的工作正常,我想我會去那。感謝大家。
那麼,第二段代碼需要在'your.utils'命名空間下嗎?此外,什麼是'#''讀者宏 - 對不起,不知道如何谷歌,或者;) – 2012-04-23 16:20:51
'#''被稱爲* var引用*。您可以在https://groups.google.com/forum/?fromgroups#!topic/clojure/jDBAJD4nWqs找到var引號的說明。 – user100464 2012-04-23 16:33:20
@ kotarak,好的,真棒解決方案。花了我很長時間來消化它,但我想我明白髮生了什麼事情。儘管如此,我仍然想在我的第一條評論中提供一些意見 – 2012-04-23 16:40:06