Clojure和ClojureScript之间的core.async差异

时间:2018-09-17 20:20:53

标签: clojure clojurescript core.async

我正在做我的第一个ClojureScript项目,但找不到Clojure常用的core.async函数/宏;例如thread<!!。 (我也在github中检查了源代码,但是它们在cljs源代码中不存在)

是否有一些参考资料可以用来找出Clojure和ClojureScript中core.async的用法之间的区别?

此外,如何在cljs的chan块之外的go处执行阻塞获取操作?看来cljs的内核中没有任何阻塞操作。异步

还是只是为不返回任何值的函数启动一个单独的线程?

Google似乎并没有在cljs中提供有关core.async的很多信息

任何帮助或指点将不胜感激!

1 个答案:

答案 0 :(得分:0)

core.async是一个单独的库。使您的project.clj如下所示:

(defproject flintstones "0.1.0-SNAPSHOT"
  :min-lein-version "2.7.1"
  :dependencies [[org.clojure/clojure "1.9.0"]
                 [org.clojure/clojurescript "1.10.238"]
                 [org.clojure/core.async "0.4.474"]]
...

,您的CLJS命名空间应定义如下内容:

(ns tst.flintstones.dino
  (:require
    [cljs.test :refer-macros [deftest is async use-fixtures]]
    [cljs.core.async :as async]
    [dinoPhony] ))

和类似的代码:

 (let [ch (async/chan)]
    (async/go (async/>! ch 42))
    (println "dino: async result:" (async/go (async/<! ch)))

see this template project作为工作示例。