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

欢迎!请参阅关于页面以获取更多关于本站如何运作的信息。

+1
IO

作为一个学习练习,我在做一个基于终端的交互程序(一个游戏)。我想程序能按字符逐个处理输入。用户每次按键,程序会处理并给出输出。我不知道如何使用标准库实现。我知道 readread-line 函数,但它们读取的是整个一行(直到按下 enter 键)。这并不是我想要的。我在网上搜索并找到一个使用 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)。原因是:java.lang.IllegalArgumentException:未找到匹配的字段:read for class org.jline.terminal.impl.DumbTerminal

我不知道如何启用调试日志。我在 OS X 和 iTerm2 上工作。我在这里问了同样的问题https://clojureverse.org/t/reading-standard-input-one-character-at-a-time/5354?u=jewiet

1 个答案

+1

这并不真正是您问题的答案,但您可能觉得使用以下链接可能会有所帮助:[https://github.com/theophilusx/tui](https://github.com/theophilusx/tui) 或 [https://github.com/MultiMUD/clojure-lanterna](https://github.com/MultiMUD/clojure-lanterna),这些可能涵盖了您大量的底层终端功能,让您能够专注于您的游戏。

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

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