我正在学习Clojure。
为了练习,我开始重写为儿子解决不平等问题(例如3 + 2?7)编写的Java应用。
在Java中我做了(注意使用反斜杠转义字符)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
public class JavaTest {
public static void main(String[] args) throws Exception {
System.out.print("3 + 2 ? 7\b\b\b");
System.out.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
reader.readLine();
}
}
并查看预期结果:将光标放在问号位置,当我写一个字符时,它将覆盖问号。 correct output from java
但是当我在Clojure中做同样的事情(我相信是这样)
(print "3 + 2 ? 7\b\b\b")
(flush)
(let [reader (java.io.BufferedReader. *in*)]
(.readLine reader))
我看到光标被放置在正确的位置数毫秒,然后在行尾移动。当我放置一个字符时,它被放置在我打印的字符串的末尾。 incorrect output from clojure
作为一种解决方法,我可以使用here建议的clojure-lanterna库,但我想在没有任何库的情况下解决这种简单的事情(就像我实际上在Java中所做的那样。)
对此有何想法? 也许有人可以解释该行为的原因。我试图在Clojure来源中找到它,但是没有成功。
谢谢!
答案 0 :(得分:4)
使用clojure
代替clj
。
clj
将普通的Clojure REPL包装在rlwrap
中,从而提供了更符合人体工程学的命令行编辑体验;大概在这里它以某种方式弄乱了光标。
答案 1 :(得分:0)
您可以通过调用本机Java方法来实现上述行为:
(.println System/out "jjjabcdef 99999 777" )
(.println System/out "jjjabcdef 99999 \b\b\b 777" )
=>
jjjabcdef 99999 777
jjjabcdef 999 777