小编tan*_*mer的帖子

使用clojure制作移动应用程序(Android和IOs版本)的首选方法是什么?

我已经看到有一些工具可以从clojure构建移动应用程序,但我想知道有关库,环境,缺点,分析和实际工作示例的更多细节

谢谢

clojure clojurescript

7
推荐指数
2
解决办法
2814
查看次数

含义是什么:add-watch功能中的关键参数

我的问题是,使用文档和示例providede我无法理解:key参数的含义或其可能的值这是我所指的函数的官方文档页面:http:
//clojuredocs.org/clojure_core/clojure.核心/加手表

add-watch clojure.core

(add-watch reference key fn)  
Run Code Online (Sandbox Code Playgroud)

向watch/atom/var/ref引用添加监视功能.手表fn必须是4个参数的fn:一个键,一个参考,它的旧状态,它的新状态.每当参考的状态可能已被更改时,任何已注册的手表都将调用其功能.如果是代理,则在代理程序的线程上同步调用watch fn,如果是agent或ref,则在任何挂起的发送之前.请注意,在fn调用之前,atom或ref的状态可能已再次更改,因此请使用old/new-state而不是derefing引用.另请注意,可以同时从多个线程调用watch fns.Var观察者仅由根绑定更改触发,而不是线程本地集!每个参考键必须是唯一的,并且可以用于删除带有删除手表的手表,但是被手表机制认为是不透明的.

谢谢

clojure

5
推荐指数
2
解决办法
1408
查看次数

避免go宏限制的可能解决方案:必须在(go ...)块内调用

也许使用(<! c)外部go宏的可能解决方案可以用宏及其宏扩展时间来完成:

这是我的例子:

(ns fourclojure.asynco
      (require [clojure.core.async :as async :refer :all]))

(defmacro runtime--fn [the-fn the-value]
  `(~the-fn ~the-value)
  )
(defmacro call-fn [ the-fn]
  `(runtime--fn ~the-fn (<! my-chan))
  )

(def my-chan (chan))

(defn  read-channel [the-fn]
  (go
  (loop []
    (call-fn the-fn)
    (recur)
    )
  ))

(defn paint []
  (put! my-chan "paint!")
  )
Run Code Online (Sandbox Code Playgroud)

并测试它:

(read-channel print)
(repeatedly 50 paint)
Run Code Online (Sandbox Code Playgroud)

我已经在嵌套go中试过这个解决方案并且也可以工作.但我不确定它是不是一条正确的道路

关于这个问题的原因是与另一个问题相关的不是core.async与Clojure原则相反吗?,@ aeuhuea评论说:"在我看来,这会妨碍简单性和可组合性.为什么这不是问题?" 和@cgrand响应"go宏(它的位置)的限制也是一个特性:它强制执行有状态操作的源代码局部性." 但强制你的代码本地化与"complect"不一样?

clojure core.async

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

标签 统计

clojure ×3

clojurescript ×1

core.async ×1