私はJavaでClojureに書いた小さなコンソールプログラムを翻訳しようとしていますが、Clojureの標準*out*
varとオブジェクトの違いを理解するのに少し問題があります。 System/out
。私は彼らが同じものだったという印象を受けていましたが、私のテストの間に彼らは異なっているように見えました。Clojure:* out * vs System/out
私のプログラムでは、ユーザに番号を入力するように指示し、プロンプトと入力テキストを同じ行に入力します。 Javaでは、私はSystem.out.print()
とプロンプトを印刷し、スキャナは入力を読み取った。
以下は、Clojureでの私の最初の試みです。 print
関数は、入力にread-line
前に、その直後にブロックを発射する必要があるように思えるとごちゃ混ぜ混乱で後にすべてのものを印刷しますが:
(defn inp1 []
(print "Enter your input: ")
(let [in (read-line)]
(println "Your input is: " in)))
以下は*out*
を使用して、私の次の試みでした。これは、上記の関数と同じ問題がある:私の第三の試行で
(defn inp2 []
(.print *out* "Enter input: ")
(let [i (read-line)]
(println "You entered: " i)))
、私は最終的に直接System/out
を使用して動作するようにそれを得た:
(defn inp3 []
(let [o System/out]
(.print o "Enter input: ")
(let [i (read-line)]
(println "You entered: " i))))
私は私が最終的にそれを持ってくれてうれしいです最初の2人がいないときに私が望むやり方で、3人目がうまく動作する理由について、私は深く混乱しています。なぜ最初の2つはすぐにブロックされますか?誰かがこれについていくつかの光を当てることができますか?
the docs当たり
バッファリングされていることがわかりました。最初に.flushを呼び出す必要があります。私は、あるものが流れであり、もう1つが作家であることを知らなかった。ありがとう! – RGrun