6

打开irb

  1. 类型gets。它应该可以正常工作。
  2. 然后尝试system("choice /c YN")它应该按预期工作。
  3. 现在再试gets一次,它的行为很奇怪。

有人能告诉我这是为什么吗?

编辑:为了澄清“奇怪”行为,它允许我输入 for gets,但不显示字符,我必须按两次 enter 键。

4

1 回答 1

1

终端输入输出处理是黑暗而神秘的艺术。任何试图bash在 Windows 中PowerShell通过彩色输出工作的人都ssh知道这一点。(而且各种快捷键习惯,比如 Ctrl+Backspace 只会让事情变得更糟。)

问题的可能原因之一是特殊字符处理。那里的每个终端都可以以多种不同的模式键入字符,并且它会解析自己的输出以搜索某些字符序列以切换状态。

Fe在这里可以找到ANSI转义码序列,这是不同类型终端之间可能支持的标准之一。

看到了Esc[5;45m吗?这将使所有以下输出在洋红色背景上闪烁。而且还有更多类似的东西。

因此,从字面上看,您的问题的答案是-您的choice命令使用特殊的转义序列使输出模式混乱,而 ruby​​ 在终端操作的怪异特殊模式下会中断。

但更有用的是HighLine gem 文档的链接。当可以使用大约 12 个 LOC来实现相同的行为时,为什么人们可能想要实现特定于平台和突兀的行为?对 Gist 的所有尊重都归于 botimer,我只是通过搜索偶然发现了他的代码。

于 2013-03-15T08:56:44.147 回答