我遇到了一个问题,即如何构建我软件中的特定部分。假设我有一个名为
首先,我认为协议(如果可能的话)或多方法是解决此问题的方案。但是,我从未见过使用跨越多个命名空间的实现示例。我无法想象这该如何解决。
其次,如果我使用协议来实现这一点,我将不得不将方法命名为类似于:
make-temp-dir
(以及许多其他函数)的函数,它会根据当前操作系统执行某些黑魔法。我想能够将每个操作系统的这些方法的实现放在单独的命名空间中。首先,我认为协议(如果可能的话)或多方法是解决此问题的方案。但是,我从未见过使用跨越多个命名空间的实现示例。我无法想象这该如何解决。
其次,如果我使用协议来实现这一点,我将不得不将方法命名为类似于:
(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
命名空间下,对吧?另外,#'
读取器宏是什么 - 抱歉,我也不知道该如何搜索 ;) - sharat87#'
被称为变量引用。您可以在https://groups.google.com/forum/?fromgroups#!topic/clojure/jDBAJD4nWqs找到有关变量引用的描述。 - user100464