1

我在开始使用 Light Table 时遇到了一些麻烦。

这是我的代码(Clojure)

(ns prova1-ed.core
  (:gen-class))

(use 'clojure.java.io)

(defn -main [& args]

  (println "Type the name of the file to read: ")

  (let [fileName (read-line)]
    (let [rdr (reader fileName)]
      (doseq [line (line-seq rdr)]
        (println line)
  )))
)

我确定它有效。我已经用lein run. 如您所见,程序应该读取一个名称由用户指定的文件。

CTRL+SPACE在 Light Table 中尝试过,但这是我收到的:

ERROR: Unhandled REPL handler exception processing message {:data {:auto? false, :pos {:line 14, :ch 1}, :mime "text/x-clojure", :tags [:editor.clj :editor.clojure], :type-name "Clojure", :line-ending "\r\n", :ns user, :path "C:\\Users\\Tiago\\Documents\\Clojure\\prova1_ed\\src\\prova1_ed\\core.clj", :print-length nil, :name "core.clj", :local true, :code "(ns prova1-ed.core\n  (:gen-class))\n\n(use 'clojure.java.io)\n\n(defn -main [& args]\n\n  (println \"Type the name of the file to read: \")\n\n  (let [fileName (read-line)]\n    (let [rdr (reader fileName)]\n      (doseq [line (line-seq rdr)]\n        (println line)\n  )))\n)\n"}, :id 90, :op editor.eval.clj.sonar, :session 65d1da68-a730-4ffe-9365-9527726384e3}

错误画面

如何在 Light Tables 环境中运行它,以便输入文件名?

4

1 回答 1

1

TLDR

我认为您不能(read-line)在 Light Table 中运行,因为它必须添加对允许输入的显式支持。基本上没有标准输入。

替代

我建议您修改-main函数以接受显式 file-name参数,而不是尝试从不可用的标准输入中读取它。

我有一个在 Light Table 中工作的 Clojure webapp。

-main在名为my-app.web. 它看起来像这样:

(defn -main [& [port]]
  (let [port (Integer. (or port (env :port) 5000))
        store (cookie/cookie-store {:key (env :session-secret)})]
    (jetty/run-jetty (-> #'secured-app
                         wrap-with-logging
                         wrap-current-user
                         wrap-current-auth
                         wrap-error-page
                         (site {:session {:store store}}))
                     {:port port :join? false})))

在我命名的单独文件中light-table-start.clj,我有以下代码在 Light Table 中运行我的应用程序:

(require '[my-app.web :as web])
(require '[ring.adapter.jetty :as jetty])

(defonce server (web/-main "5000"))

;; (.start server)
;; (.stop server)

我运行Eval: Eval editor contents命令(Windows 和 Linux 上的 ++CtrlShiftEnter⌘</kbd>+Shift+Enter on Mac OS) the first time I want to run my app (or later, if the connection is closed for some reason). When I want to start or stop the server I can just highlight the code on the respective commented lines and run the Eval: Eval a form in editor command (Ctrl+Enter on Windows and Linux or ⌘</kbd>+Enter on Mac OS).

于 2016-04-25T16:19:06.060 回答