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。ご覧のとおり、プログラムはユーザーが指定した名前のファイルを読み取る必要があります。

Light Table で試してみCTRL+SPACEましたが、次のように表示されます。

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}

エラー画面

ファイル名を入力できるように、ライトテーブルの環境で実行するにはどうすればよいですか?

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 ではCtrl+ Shift+またはEnter⌘</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 に答える