7

当面の問題は、プログラムを実行するlein runと、その(read-line)部分に到達し、そこから抜け出せないことです。つまり、read-line が返されないということです。

関連するコードは次のとおりです。

(def command (atom ""))

(defn print-prompt []
  (print "prompt> ")
  (flush)
)

(defn ask-for-input []
    (print-prompt)
    (let [x (str (read-line))]
      (println (str "User input: " x))
      (reset! command x)
    )
)

画面に "User input: " 文字列が表示されません。奇妙な部分は、実行lein replして呼び出すと(ask-for-input)正しく動作することです:S

4

2 に答える 2

12

lein トランポリン ランを試してみてください。うまくいきます。

以下は leiningen の FAQ からのものです。

Q: プロジェクト内の stdin にアクセスできません。

A: これは、JVM のプロセス処理方法の制限です。それらのどれも標準入力を正しく公開していません。これは、read-line のような関数がほとんどのコンテキストで期待どおりに機能しないことを意味しますが、repl タスクには必ず回避策が含まれています。また、トランポリン タスクを使用して、プロジェクトの JVM をサブプロセスとして起動するのではなく、ライニンゲンが終了した後に起動することもできます。

于 2012-06-04T15:11:21.580 に答える
0

ソースコードを試しましたが、フラッシュを省略しました。問題なく動作しました。どのバージョンのClojureを使用していますか?Clojure1.3で次のコードを試しました。

(def command (atom 0))

(defn print-prompt []
  (print "prompt> ")
)

(defn ask-for-input 
    []
    (print-prompt)
    (let [x (str (read-line))]
      (println (str "User input: " x))
      (reset! command x)
    ))

編集:コピーしてテストした関数の1つを変更しました。これで、スタンドアロンおよびleinrunで動作するようになりました。元の例では(フラッシュ)しました。

(defn print-prompt []
  (print "prompt> ")
  (flush)
)

私が得たものから、printlnはフラッシュを引き起こしますが、印刷は引き起こしません、そしてあなたは印刷後にフラッシュを必要とします。

役立つかもしれない場合に備えて、この情報を追加しています。repl-testというClojureプロジェクトがあります。これが私のrepl-testプロジェクトのcore.cljファイルヘッダーです。すでに投稿されているソースは、投稿に関係のない他のいくつかの機能とともにこのファイルにあります。

(ns repl-test.core
  (:gen-class)
  (:use clojure.contrib.command-line)
  (:require [clojure.contrib.string :as cstr])
  (:require [clojure.contrib.trace :as ctr])
  (:require [clojure.string :as sstr])
  (:use clojure-csv.core))

そして、これがproject.cljファイルです。

(defproject repl-test "0.0.1-SNAPSHOT"
  :description "TODO: add summary of your project"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [clojure-csv/clojure-csv "1.2.4"]
                 [org.clojure/tools.cli "0.1.0"]
                 [clj-http "0.1.3"]]
   :aot [repl-test.core]
   :main repl-test.core)
于 2012-06-04T15:29:06.517 に答える