在clojure中获取调用者名称空间

Tob*_*s S 4 logging namespaces clojure

我在Clojure中包装了一个日志库; 让我们调用它的命名空间foo.logger.现在我有另一个命名空间bar.baz,从那里我称之为记录器.

是否有一些惯用/好的方式,我可以确定记录器内的调用者命名空间的命名空间?我不想将此设置为记录器的参数;-)

Art*_*ldt 8

这是使用宏是一个可靠选择的罕见情况之一.

使得打印值的宏*ns将获得*ns*调用者空间中的值,因为宏将扩展并在该命名空间中运行.

(defmacro log [msg]
  `(printf "%s:%s\n" ~*ns* ~msg))
Run Code Online (Sandbox Code Playgroud)

试着要注意围绕这个的"宏观传染",因为任何想要扩展这个功能的东西都需要也是一个宏,尽管我在过去的六年里一直在做这个并且它经常不是问题.