Clojurescript使用nodejs读取stdin
Clojurescript using nodejs to read stdin
我无法使用 ClojureScript 从 NodeJs 读取标准输入。理想情况下,最终命令应该是 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)
在 (/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)
您似乎在 ClojureScript/Closure compilation which aggressively renames functions and variables to make the output JavaScript code smaller 中使用了高级优化。
您可能会尝试使用简单的 (:simple
) 优化或提供外部定义,这将有助于 Closure 编译器正确处理您的和库代码(引用的网页包括 link 到 a sample project using externs).
您的代码中还有另一个问题是您如何调用 readline.createInterface
:它需要选项对象,而您传递给它的只是选项值。您需要像下面这样调用它:
(.createInterface readline
#js {:input js/process.stdin
:output js/process.stdout})
我无法使用 ClojureScript 从 NodeJs 读取标准输入。理想情况下,最终命令应该是 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) 在 (/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)
您似乎在 ClojureScript/Closure compilation which aggressively renames functions and variables to make the output JavaScript code smaller 中使用了高级优化。
您可能会尝试使用简单的 (:simple
) 优化或提供外部定义,这将有助于 Closure 编译器正确处理您的和库代码(引用的网页包括 link 到 a sample project using externs).
您的代码中还有另一个问题是您如何调用 readline.createInterface
:它需要选项对象,而您传递给它的只是选项值。您需要像下面这样调用它:
(.createInterface readline
#js {:input js/process.stdin
:output js/process.stdout})