小编ndr*_*drw的帖子

Clojure:列出在命名空间内实现某些协议的所有deftypes

我有一个协议和几个deftypes在一个工作区内实现它.如何列出实现以下协议的所有deftypes?

我已经找到了从(ns-public)过滤数据的解决方案,但我不喜欢它,因为它使用了一些"魔法"来完成工作,因为我没有找到正确的方法来实现我的目标与满足?延伸?.

有任何想法吗?

(defprotocol Protocol
  (foo[this] "just an interface method"))


(deftype Dummy [] Protocol
  (foo[this] "bar"))


(defn implements? [protocol atype] "fn from clojure sources"
  (and atype (.isAssignableFrom ^Class (:on-interface protocol) atype)))


(defn list-types-implementing[protocol]
  (filter (fn[x] (let [[a b] x]
            (when (.startsWith (str a) "->") ; dark magic        
              (implements? protocol 
               (resolve (symbol 
                (.replace (str a) "->" "")))))
            )) 
         (ns-publics *ns*)))

(list-types-implementing Protocol) ; => ([->Dummy #'user/->Dummy])

(let [[a b] (first(list-types-implementing Protocol))]
    (foo (b)) ; => "bar"
)
Run Code Online (Sandbox Code Playgroud)

protocols clojure

9
推荐指数
1
解决办法
937
查看次数

在不编译ClojureScript的情况下运行'lein test'

我有客户端 - 服务器应用程序(Clojure +环中的后端,使用ClojureScript完成的前端)并且有单元测试,但仅适用于后端.

每次运行'lein test'lein都要编译ClojureScript,因为':hook [leiningen.cljsbuild]'在project.clj中设置.

我可以在没有ClojureScript重新编译的情况下以某种方式运行测试吗?

clojure leiningen clojurescript

6
推荐指数
1
解决办法
443
查看次数

如何在不发出ajax请求的情况下将edn从clojure传递给clojurescript(即通过打嗝生成的页面)

我正在用clojure和clojurescript开发RIA.后端使用打嗝生成一个结果html,如

(html5 
[:head 
  (include-js "/js/my-cljs-generated.js")]
[:body ... ])
Run Code Online (Sandbox Code Playgroud)

如何在生成的html中将edn(hashmap,vector等)传递给clojurescript,即不进行ajax调用?

我想让打嗝做这样的事情:

(include-edn 
   "var_name" {:foo :bar}) ; or any other clojure data
Run Code Online (Sandbox Code Playgroud)

并且能够以某种方式从cljs访问传递的edn(例如,通过名称).

目前我的实现有点hacky并且存储在全局js var中

(hiccup/javascript-tag (str "var edn = \""
                       (pr-str my-clojure-data) "\";"))        
Run Code Online (Sandbox Code Playgroud)

在cljs方面确实如此

(jayq/document-ready 
  (fn []
    (if-let [edn (.-edn js/window)]
      (do-something-with (cljs.reader/read-string edn))
    )
    ...
)
Run Code Online (Sandbox Code Playgroud)

也许有更多惯用的方法来实现这一目标?

clojure hiccup clojurescript edn

5
推荐指数
1
解决办法
1940
查看次数

标签 统计

clojure ×3

clojurescript ×2

edn ×1

hiccup ×1

leiningen ×1

protocols ×1