2024 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面以获取更多有关此功能的信息。

+1 投票
IO

作为一个学习练习,我正在制作一个基于终端的交互式程序(一个游戏)。我想让程序逐个字符处理输入。每次用户按下按钮,程序都会进行处理并输出。我用标准的库找不到这样做的方法。我知道 readread-line 函数,但它们会读取整行(直到按下回车)。这并不是我想要的。我在网上搜索并找到了这个解决方案,它使用了 jline3 Java 库:[链接](https://stackoverflow.com/questions/58571928/how-can-i-read-a-single-character-from-stdin-in-clojure)。我试着按照它来做,但当我运行我的程序时,我得到了以下警告和错误。

警告:无法创建系统终端,创建笨终端(要获取更多信息,请启用调试日志)。异常发生在线程 "main" 中,编译错误在 (/private/var/folders/nt/26pz2dqj4y70z38vrtgd8t4m0000gn/T/form-init7411586405251765923.clj:1:125)。原因是:类 org.jline.terminal.impl.DumbTerminal 中找不到匹配的字段 read。

我不知道如何启用调试日志。我正在使用OSX和iTerm2。我已在此处提出了相同的问题。

1 答案

+1 投票

这并不是你问题的真正答案,但你可能想使用https://github.com/theophilusx/tuihttps://github.com/MultiMUD/clojure-lanterna,这些可能有帮助你覆盖许多底层终端的功能,让你可以专注于你的游戏。

感谢您的回复。我使用lanterna库解决了这个问题。我在clojureverse.org上对这个答案写了一个简要描述。

https://clojureverse.org/t/reading-standard-input-one-character-at-a-time/5354/2?u=jewiet
...