我正在尝试定义一个函数(或宏),它应该只接受来自某个命名空间的函数作为参数
(ns ns1)
(defn high-function[f & params]
(if (condition on f meta regarding namespace)
(apply f params)
(throw (Exception. "not allowed"))))
调用 high-function 的函数应该位于另一个命名空间(ns2)中,并且参数函数应该位于另一个命名空间(ns3)中。 ns2 需要 ns1 和 ns3。
我尝试传递函数的 var 而不是函数,因为函数没有元,但 var 有,但是 cljs.core 没有 var-get 方法供我随后执行该函数。我可以同时传递 var 和函数,但这很丑陋。
deref
来获取函数:
(defn high-function [f & params]
(if (= 'app.ns3 (ns-name (:ns (meta f))))
(apply @f params)
(throw (Exception. "Not allowed."))))
(high-function #'app.ns3/foo ...)