【问题标题】:Clojure Functional reactive programming (FRP) with Lamina: Simple clock code?Clojure 使用 Lamina 的函数式反应式编程 (FRP):简单的时钟代码?
【发布时间】:2013-07-03 20:37:34
【问题描述】:

我正在使用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 数据

  • 每秒打印一次(订阅或 for-each 可观察时间集合)

欢迎任何反馈。谢谢。

编辑:我退出了。

经过一番研究,我得出结论,编写 FRP 的最佳方法是带有 RxJs 的 ClojureScript(来自 MS 的 ReactiveExtention)。

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

【问题讨论】:

    标签: clojure reactive-programming lamina-clojure


    【解决方案1】:

    您可以尝试Bacon.js,它是在作者抱怨其晦涩的 API 后创建的 Rx.js 的继任者。 Bacon.js 非常干净,可以与 jQuery、Backbone.js、AngularJS 甚至 Node.js 集成。基本上,您可以将任何类型的事件包装到 Bacon 的事件流中,然后开始用它们做一些美妙的事情。

    奖励:您甚至可以尝试yolk,它被描述为“一个围绕 bacon.js 的瘦 Clojurescript 包装器”。

    -- 编辑:快速修复错字

    【讨论】:

      【解决方案2】:

      我发现了一篇好文章: 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))
      

      【讨论】:

        【解决方案3】:

        为什么不试试ProAct.js - 它同时实现了函数式和面向对象的方法。它有一个 node.js (proact.js) 包 - 它稳定且经过良好测试。

        【讨论】:

          猜你喜欢
          • 2014-11-08
          • 2015-04-02
          • 2011-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-25
          • 2010-11-06
          • 2013-07-24
          相关资源
          最近更新 更多