繁体   English   中英

Clojurescript使用Node.js读取标准输入

[英]Clojurescript using nodejs to read stdin

我无法使用ClojureScript从NodeJ读取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 .j:211:409)位于Gc(/Users/tinatuh/Workspace/AlgorithmicToolbox-Coursera/main.js:99:59)at 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编译中使用高级优化功能,功能积极地重命名函数和变量,以使输出JavaScript代码更小

您可能会尝试使用简单的( :simple )优化,或者提供外部定义,这些定义将帮助Closure编译器正确处理您的代码和库代码(所引用的网页包括使用externs指向示例项目的链接)。

您的代码中还有另一个问题,即如何调用readline.createInterface :它期望options对象,而您将其传递给裸露的options值。 您需要按以下方式调用它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM