Clojurescript使用nodejs来读取stdin

我无法使用ClojureScript从NodeJs读取stdin。 理想情况下,最终的命令是java -cp cljs.jar:src clojure.main node.clj后跟node main.js Javascript版本正常工作,但我无法使用ClojureScript来使用它。

Clojurescript

 (ns hello-world.core (:require [clojure.string :as string] [cljs.nodejs :as nodejs])) (nodejs/enable-util-print!) (defn -main [& args] (let [readline (js/require "readline") rl (.createInterface readline js/process.stdin js/process.stdout)] (.on rl "line" (fn [line] (def lineVector (clojure.string/split line #" ")) (if (and (nil? lineVector) (< (get lineVector 0) 10) (< (get lineVector 1) 10)) (+ (get lineVector 0) (get lineVector 0))))))) (set! *main-cli-fn* -main) 

使用Javascript

 var readline = require('readline'); process.stdin.setEncoding('utf8'); var rl = readline.createInterface({ input: process.stdin, terminal: false }); rl.on('line', readLine); function readLine (line) {...} 

我收到以下错误信息:

TypeError:a.ac不是函数Function.be.w(/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:212:47)在be(/ Users / tinatuh / Workspace / AlgorithmicToolbox-Coursera / main .js:211:409)at Jc(/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:108:60) )在对象。 (module.js:652:10)处的Module._compile(module.js:641:30)处的(/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:212:506) )在Function.Module._load(module.js:495:3)处的try.ModuleLoad(module.js:503:12)处的Module.load(module.js:560:32)

看起来您正在使用ClojureScript / Closure编译中的高级优化function,它会大量重命名函数和variables,以使输出JavaScript代码更小 。

您可以尝试使用简单的( :simple )优化,或者提供externs定义,这将有助于Closure编译器正确地处理您的库和代码(引用的网页包含使用extern的示例项目的链接)。

在你的代码中,如何调用readline.createInterface还有另外一个问题:它期望options对象,而不是传递给它的是裸选项值。 你需要像下面这样调用它:

 (.createInterface readline #js {:input js/process.stdin :output js/process.stdout})