Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js上的ClojureScript,代码_Node.js_Clojure_Clojurescript - Fatal编程技术网

node.js上的ClojureScript,代码

node.js上的ClojureScript,代码,node.js,clojure,clojurescript,Node.js,Clojure,Clojurescript,我正在尝试在node.js上运行ClojureScript app1.js目标代码:工作: var rx = require("./lib/rx/rx.node.js"); var moment = require("./lib/moment/moment.js"); var timeStream = new rx.Observable.interval(300) .subscribe(function(index) { console.log(moment(

我正在尝试在node.js上运行ClojureScript

app1.js目标代码:工作:

var rx = require("./lib/rx/rx.node.js");
var moment = require("./lib/moment/moment.js");

var timeStream = new rx.Observable.interval(300)
    .subscribe(function(index)
     {
        console.log(moment().format("dddd, MMMM Do YYYY, h:mm:ss a"));
    });
core.cljs我迄今为止的尝试:

(ns rxcljs.core
  (:use [cljs.nodejs :only [require]])
)

(def rx (require "./lib/rx/rx.node.js"))
(def moment (require "./lib/moment/moment.js")) 

(-> rx
   (.Observable)
   (.interval 300)
   (.subscribe #(->> (->(moment) 
                        (.format "dddd, MMMM Do YYYY, h:mm:ss a" )
                      )
                     (.log js/console)
                 )
    )
)
app.js实际编译输出:不工作

.....
.....
cljs.nodejs = {};
cljs.nodejs.require = require;
cljs.nodejs.process = process;
cljs.core.string_print = cljs.nodejs.require.call(null, "util").print;
var rxcljs = {core:{}};
rxcljs.core.rx = cljs.nodejs.require.call(null, "./lib/rx/rx.node.js");
rxcljs.core.moment = cljs.nodejs.require.call(null, "./lib/moment/moment.js");
rxcljs.core.rx.Observable().interval(300).subscribe(function() {
  return console.log(rxcljs.core.moment.call(null).format("dddd, MMMM Do YYYY, h:mm:ss a"))
});
错误:

/...../rxcljs/app.js:12726
rxcljs.core.rx.Observable().interval(300).subscribe(function() {
                            ^
TypeError: Cannot call method 'interval' of undefined
请给我一些建议


答案编辑

多亏了迈克尔:

(ns rxcljs.core
  (:use [cljs.nodejs :only [require]])
)
(def log #(.log js/console %))

(def rx (require "./lib/rx/rx.node.js"))
(def moment (require "./lib/moment/moment.js"))

(-> rx .-Observable
   (.interval 300)
   (.subscribe #(->> (-> (moment) 
                         (.format "dddd, MMMM Do YYYY, h:mm:ss a")
                     )
                     (log) 
                )    
   )
)
rx interval工作正常,但矩格式输出仍然正常。

(.Observable rx)
始终是ClojureScript中的方法调用;对于属性访问,您必须使用
(.-Observable rx)
或者
(aget rx“Observable”)
.1

记住这一点,您的
timeStream
定义可以用ClojureScript重写,如下所示:

(def time-stream
  (.. rx
      -Observable            ;; property access
      (interval 300)         ;; method call
      (subscribe (fn [index] ...))))
如果您觉得这更漂亮,您也可以使用
js/rxcljs.core.rx.Observable
js
magic namespace导致在编译输出中使用作为符号名称部分的文字JavaScript标识符;特别是,这意味着您需要自己提供名称空间前缀,如图所示)



1请注意,在Clojure中,
(.foo x)
可能是方法调用或属性访问,具体取决于
x
,因此这是方言之间的区别。

谢谢Michal。我设法理解了基本内容,但您的代码有点混乱。我发布了一些工作代码。