打开irb
并
- 类型
gets
。它应该可以正常工作。 - 然后尝试
system("choice /c YN")
它应该按预期工作。 - 现在再试
gets
一次,它的行为很奇怪。
有人能告诉我这是为什么吗?
编辑:为了澄清“奇怪”行为,它允许我输入 for gets
,但不显示字符,我必须按两次 enter 键。
打开irb
并
gets
。它应该可以正常工作。system("choice /c YN")
它应该按预期工作。gets
一次,它的行为很奇怪。有人能告诉我这是为什么吗?
编辑:为了澄清“奇怪”行为,它允许我输入 for gets
,但不显示字符,我必须按两次 enter 键。
终端输入输出处理是黑暗而神秘的艺术。任何试图bash
在 Windows 中PowerShell
通过彩色输出工作的人都ssh
知道这一点。(而且各种快捷键习惯,比如 Ctrl+Backspace 只会让事情变得更糟。)
问题的可能原因之一是特殊字符处理。那里的每个终端都可以以多种不同的模式键入字符,并且它会解析自己的输出以搜索某些字符序列以切换状态。
Fe在这里可以找到ANSI转义码序列,这是不同类型终端之间可能支持的标准之一。
看到了Esc[5;45m
吗?这将使所有以下输出在洋红色背景上闪烁。而且还有更多类似的东西。
因此,从字面上看,您的问题的答案是-您的choice
命令使用特殊的转义序列使输出模式混乱,而 ruby 在终端操作的怪异特殊模式下会中断。
但更有用的是HighLine gem 文档的链接。当可以使用大约 12 个 LOC来实现相同的行为时,为什么人们可能想要实现特定于平台和突兀的行为?对 Gist 的所有尊重都归于 botimer,我只是通过搜索偶然发现了他的代码。