我在 clojure 中有以下代码:
(do
(println "starting....")
(sig! a 0)
(sig! b 0)
(future
(Thread/sleep 4000)
(println "switch 1")
(sig! a 1)
(sig! b 0)
(Thread/sleep 4000)
(println "switch 2")
(sig! a 0)
(sig! b 1)
(Thread/sleep 4000)
(println "switch 3")
(sig! a 1)
(sig! b 1)) nil))
我有一些观察者监听原子 a、b、s 和 c1,并在它们发生变化时打印出一些字符串。使用(print (str uid ":" @o "\n")
或 println 版本。 Clojure 文档说print
and println
应该表现完全相同,除了换行符println
,但是我没有看到这个。
当观察者使用println
我立刻就看到了琴弦。当观察者使用print
。我只在下一次时看到输出println
叫做。下面我有输出println
与print
.
With print
我只看到最后一个值println
.
starting....
switch 1
a:1
s:1
switch 2
a:0
b:1
s:0
s:1
switch 3
现在有了 println
starting....
switch 1
a:1
s:1
switch 2
a:0
b:1
s:0
s:1
switch 3
a:1
s:0
c1:1
正如您所看到的,观察者拾取的更改在本例中被打印出来。我正在使用 Clojure 1.5。它几乎看起来像一个print
需要一个println
将其内容刷新到控制台。
更仔细地查看了 Clojure 源代码之后code for println
and print
。不同之处在于println
calls prn
并打印调用pr
。在里面prn
the function newline
叫做。然后它检查刷新新行如果这是真的,它会显式调用flush
。因此调用print
字符串中任意数量的换行符(“\n”)都不会刷新到输出流,您必须调用newline
,或致电flush
直接地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)