我无法使用ClojureScript从NodeJs读取stdin。理想情况下,最终命令为java -cp cljs.jar:src clojure.main node.clj
,后跟node main.js
。 Javascript版本工作正常但我无法使用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)
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) at(/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:211:409) 在Gc(/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:99:59) 在Jc(/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:108:60) 在对象。 (/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:212:506) 在Module._compile(module.js:641:30) 在Object.Module._extensions..js(module.js:652:10) 在Module.load(module.js:560:32) 在tryModuleLoad(module.js:503:12) 在Function.Module._load(module.js:495:3)
答案 0 :(得分:2)
您认为ClojureScript/Closure compilation aggressively renames functions and variables to make the output JavaScript code smaller使用了a sample project using externs中的高级优化。
您可能会尝试使用简单(:simple
)优化,或提供外部定义,以帮助Closure编译器正确处理您的库代码(引用的网页包含指向{{3}}的链接)。< / p>
您的代码中还有另一个问题,即您如何调用readline.createInterface
:它需要选项对象,而您传递的是明确的选项值。你需要像下面这样打电话:
(.createInterface readline
#js {:input js/process.stdin
:output js/process.stdout})