与Lamina的Clojure功能反应式编程(FRP):简单的时钟代码?

时间:2013-07-03 20:37:34

标签: clojure reactive-programming lamina

我正在使用Lamina来实现功能反应式编程(FRP)。

作为初学者,我尝试编写一个非常简单的时钟来理解库的基础知识。

根据Lamina 0.5.0-rc4 API文档,有lamina.time API: http://ideolalia.com/lamina/lamina.time.html#var-now

我想实现一个非常简单的时钟,其中:

  • 每秒的间隔为Observable time Streaming Collection / List / Seq(我还不太了解差异)(编辑:现在我明白它在Lamina上被称为Channels)< /强>

  • 现在作为Observable Streaming数据

  • Println现在每秒(订阅或每个Observable时间集合)

欢迎任何反馈。感谢。

编辑:我退出了。

经过一些研究,我得出结论,编写FRP的最佳方法是使用RxJ的ClojureScript(来自MS的ReactiveExtention)。

在我的相关问题中查看示例Code for ClojureScript + RxJs + node.js: ClojureScript on node.js, code

3 个答案:

答案 0 :(得分:3)

你可以尝试Bacon.js,这是Rx.js的继承者,在其作者抱怨其模糊的API后创建。 Bacon.js非常干净,可以与jQuery,Backbone.js,AngularJS甚至Node.js集成。基本上你可以将任何类型的事件包装到培根的事件流中并开始用它们做很棒的事情。

额外奖励:您甚至可以尝试yolk,描述为“围绕bacon.js的薄Clojurescript包装”。

- 编辑:快速拼写错误

答案 1 :(得分:1)

我找到了一篇好文章: http://adambard.com/blog/why-clojure-part-2-async-magic/

-LAMINA:高级异步处理

(ns example.helloperiodically
  (:require [lamina.core :as lamina]))

(def ch (lamina/periodically 1000 (fn [] "Hello World!")))

(def loop-forever (comp doall repeatedly))

(defn consumer []
   (loop-forever
     (fn [] (println @(lamina/read-channel ch)))))

(defn main []
  (-> (Thread. consumer) .start))

答案 2 :(得分:0)

为什么不尝试ProAct.js - 它实现了功能和面向对象的方法。它有一个node.js包(proact.js) - 它稳定且经过充分测试。