Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure'中的退格esc字符;s控制台_Clojure - Fatal编程技术网

Clojure'中的退格esc字符;s控制台

Clojure'中的退格esc字符;s控制台,clojure,Clojure,我在学Clojure 为了练习,我开始重写我为儿子编写的Java应用程序,以解决不等式(如3+2-7) 在java中我做到了(注意使用反斜杠转义字符) 看到预期结果:光标放在问号位置,当我写一个字符时,它会覆盖问号 但当我在Clojure做同样的事情时(我相信是这样) (print "3 + 2 ? 7\b\b\b") (flush) (let [reader (java.io.BufferedReader. *in*)] (.readLine reader)) 我看到光标在正确

我在学Clojure

为了练习,我开始重写我为儿子编写的Java应用程序,以解决不等式(如3+2-7)

在java中我做到了(注意使用反斜杠转义字符)

看到预期结果:光标放在问号位置,当我写一个字符时,它会覆盖问号

但当我在Clojure做同样的事情时(我相信是这样)

(print "3 + 2 ? 7\b\b\b")
(flush)

(let [reader (java.io.BufferedReader. *in*)]
      (.readLine reader))
我看到光标在正确的位置放置了毫秒,然后移动到行的末尾。当我放置一个字符时,它被放置在我打印的字符串的最末端

作为一种解决方法,我可以按照建议使用clojure lanterna库,但我希望在没有任何库的情况下解决这样一个简单的问题(就像我在Java中实际做的那样)

有什么想法吗? 或者有人可以解释这种行为的原因。我试图在Clojure的资料中找到它,但没有成功


提前谢谢

您可以通过调用本机Java方法来实现上述行为:

  (.println System/out "jjjabcdef 99999 777"  )
  (.println System/out "jjjabcdef 99999 \b\b\b 777"  )
=>


使用
clojure
而不是
clj


clj
将普通Clojure REPL包装在
rlwrap
中,提供更符合人体工程学的命令行编辑体验;大概在这里,它在某种程度上弄乱了光标。

刚刚尝试了Clojure代码(将其包装在函数
(defn read test[])
,然后调用了它)-它可以正常工作。您如何调用Clojure代码?我只是在终端中执行
cljClojure测试.clj
。忘了提一下,我使用的是Linux Mint 18,这可能是相关的。它也适用于我,因为@AlephAleph建议我们需要知道如何执行代码。我的代码在clojure-test.clj文件中(上面是完整的列表)。我按照我之前评论中的描述运行它。我还试图按照@AlephAleph的建议将其包装成一个函数,但仍然会出现错误的行为。我还尝试从repl执行
(加载文件“clojure test.clj”)
,结果相同(包装版本和裸版本)。您使用哪个操作系统/外壳?这可能与这个问题有关吗?@glts的回答为我解决了这个问题(bash,ubuntu18.04)。这没有帮助。我以前试过这个,现在又试过了。它适用于您的情况,因为您将继续在相同的字符串中打印新字符,其中\b位于相同的位置。但是当你要求用户输入一个符号时,它不起作用。你完全正确!非常感谢你!我读了关于
clj
clojure
以及
rlwrap
的更多差异。
  (.println System/out "jjjabcdef 99999 777"  )
  (.println System/out "jjjabcdef 99999 \b\b\b 777"  )
jjjabcdef 99999 777
jjjabcdef 999 777