当前位置:  开发笔记 > 编程语言 > 正文

Clojure - 发生故障的副作用

如何解决《Clojure-发生故障的副作用》经验,为你挑选了2个好方法。

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

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

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

user=> (goo)
echo> foo
foonil

但相反,回声和读取线被切换:

user=> (goo)
foo
echo> foonil

为什么会这样?我缺少一个微妙的东西吗?

编辑:从Joe的回答,更新的正确解决方案是:

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

此外,如果您使用println而不是冲洗,则不需要冲洗print.



1> jmucchiello..:

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

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


凉.现在我用一种我不知道的语言检查答案.:-) 很高兴我能帮助你.

2> Mark Probst..:

另外,请不要使用"def",除非你真的,真的想定义一个全局变量.改为使用"let":

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

或者,更短

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

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有