14

在涉足 Clojure 时,我编写了一个非常基本的程序来回显用户输入的任何内容。然而,它并没有以我认为自然的方式运行。这是代码:

(defn goo []
  (print "echo> ")
  (def resp (read-line))
  (print resp)
)

我希望代码像这样运行(对我来说foo作为输入输入read-line):

user=> (goo)
echo> foo
foonil

但取而代之的是, echo 和 read-line 被切换:

user=> (goo)
foo
echo> foonil

为什么会这样?有没有我错过的微妙之处?

编辑:根据乔的回答,更新后的正确解决方案是:

(defn goo []
  (print "echo> ")
  (flush)
  (def resp (read-line))
  (print resp)
  (flush)
)

此外,如果您使用println而不是print.

4

2 回答 2

18

我对clojure一无所知,但这听起来像是缓冲区没有被刷新的情况。弄清楚如何在打印后冲洗标准。println 函数可能会在每行的末尾刷新。尝试:

(defn goo []
  (print "echo> ")
  (flush )
  (def resp (read-line))
  (print resp)
)
于 2008-12-23T03:08:00.300 回答
14

另外,请不要使用“def”,除非您真的非常想定义一个全局变量。改用“让”:

(defn goo []
  (print "echo> ")
  (flush)
  (let [resp (read-line)]
    (print resp)
    (flush)))

或者,更短

(defn goo []
  (print "echo> ")
  (flush)
  (print (read-line))
  (flush))
于 2009-03-20T11:08:36.097 回答